Docsity
Docsity

Prepare-se para as provas
Prepare-se para as provas

Estude fácil! Tem muito documento disponível na Docsity


Ganhe pontos para baixar
Ganhe pontos para baixar

Ganhe pontos ajudando outros esrudantes ou compre um plano Premium


Guias e Dicas
Guias e Dicas


pged 04, Notas de estudo de Engenharia Madeireira

Listas Duplamente encadeadas

Tipologia: Notas de estudo

Antes de 2010

Compartilhado em 24/11/2010

samuel-santos-22
samuel-santos-22 🇧🇷

4.6

(41)

262 documentos

1 / 10

Toggle sidebar

Esta página não é visível na pré-visualização

Não perca as partes importantes!

bg1
1
CursoSuperior de Tecnologia emTelemática
Programação e Estruturas de Dados
Listas Lineares Duplamente Encadeadas
Copyright©2010
Prof. CésarRocha
cesarocha@ifpb.edu.br
pf3
pf4
pf5
pf8
pf9
pfa

Pré-visualização parcial do texto

Baixe pged 04 e outras Notas de estudo em PDF para Engenharia Madeireira, somente na Docsity!

1

Curso Superior de Tecnologia em Telemática Programação e Estruturas de Dados

Listas Lineares Duplamente Encadeadas

Copyright© Prof. César Rocha [email protected]

Objetivos

ß Explorar conceitos importantes acerca das listaslistas

duplamente encadeadasduplamente encadeadas utilizando a linguagem C

ß Organização e implementação, características, vantagens e desvantagens, regras de utilização, operações básicas e os algoritmos de implementação

ß Estas estruturas são um pouco mais complicadas

que as listas encadeadas (módulo anterior)

ß Contudo, tenta superar algumas limitações encontradas no TAD supracitado

ß Este módulo também fará uso das regras de criação

das bibliotecasbibliotecas em práticas de laboratório futuras

Desvantagens Lista Encadeada

å Em uma lista encadeada simples, não temos como

percorrer eficientemente os elementos em ordemordem

inversainversa , isto é, do final para o início da lista

ç O encadeamento simples também dificultava a

remoção remoção de um elemento da lista. Veja abaixo:

/* Parâmetros: lista = a lisdado = passa Retorno: 1 em caso de suceposição = pos */ int removerElemento(TListaEnc* TListaEnc aux; TListaEnc anterior; int contador; // verifica se a lista esta v if(listaVazia(lista)) return

Assim, mesmo quando sabíamos qual elemento íamos retirar,Assim, mesmo quando sabíamos qual elemento íamos retirar, tínhamos que percorrer a lista, elemento por elemento, atétínhamos que percorrer a lista, elemento por elemento, até encontrarmos o elemento anterior.encontrarmos o elemento anterior. Isso se deve porque, dado um elemento, não tínhamos comoIsso se deve porque, dado um elemento, não tínhamos como acessar diretamente o seu elemento anterior (ou antecessor)acessar diretamente o seu elemento anterior (ou antecessor) para redirecionar o ponteiro.para redirecionar o ponteiro. Note, na função de remoção, que a solução encontrada foiNote, na função de remoção, que a solução encontrada foi declarar uma variável somente para podermos guardar odeclarar uma variável somente para podermos guardar o endereço do nó anterior ao elemento a ser removido da lista.endereço do nó anterior ao elemento a ser removido da lista.

5

ß Para solucionar esses problemas, podemos formar o

que chamamos de listas duplamente encadeadaslistas duplamente encadeadas

ß Semelhante à lista encadeada, mas contém dois ponteiros (ou links) na estrutura do nó ß Cada elemento agora tem um ponteiro para o próximo elemento e um ponteiro para o seu elemento anterior

ß ß GraficamenteGraficamente

ß O primeiro nó não possui elemento anterior (o ponteiro do elemento anterior terá valor NULL)

Conceitos

L João Maria Ana Edu

ß Este novo TAD possui semelhanças com TListaEnc

ß ß RepresentaçãoRepresentação de cada nó:

ß estrutura contém os campos dado, proximo e anterior

ß Onde:

Estruturação dos Dados

_/ estruturação /_ typedef struct nolista { int dado; struct nolista proximo; struct nolista anterior; }no; typedef no* TListaDupEnc;**

_/ estruturação /_ typedef struct nolista { int dado; struct nolista proximo; struct nolista anterior; }no; typedef no* TListaDupEnc;**

_/ estruturação /_ typedef struct nolista { int dado; struct nolista proximo; }no; typedef no TListaEnc;**

_/ estruturação /_ typedef struct nolista { int dado; struct nolista proximo; }no; typedef no TListaEnc;**

*TListaDupEnc p

Onde: Onde: p-p->dado;>dado; p-p->>proxprox;; p-p->ant;>ant;

ant dado prox

Operações básicas

ß A literatura é unânime quanto às operações básicas

realizadas numa lista duplamente encadeada:

å criarcriar uma lista vazia ç verificar se uma lista está vaziaestá vazia é obter o tamanhotamanho da uma lista è obterobter o elementoelemento de uma determinada posição na lista ê obter a posiçãoobter a posição onde se encontra um determinado elemento ë inserir um novo elementoinserir um novo elemento numa determinada posição na lista í removerremover um elemento de uma determinada posição na lista

Para um bom aproveitamento: Para um bom aproveitamento:

ß Codifique os exemplos mostrados nestes slides e

verifique pontos de dúvidas

ß Resolva todas as questões da práprática detica de

laboratólaboratório de listas duplamente encadeadasrio de listas duplamente encadeadas

ß Procure o professor ou monitor da disciplina e

questione conceitos, listas, etc.

ß Não deixe para codificar tudo e acumular assunto

para a primeira avaliação.

ß Este é apenas um dos assuntos abordados na prova!