Pged 04

10
1 Curso Superior de Tecnologia em Telemática Programação e Estruturas de Dados Listas Lineares Duplamente Encadeadas Copyright©2010 Prof. César Rocha [email protected]

Transcript of Pged 04

Page 1: Pged 04

1

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

Listas Lineares Duplamente Encadeadas

Copyright©2010Prof. César Rocha

[email protected]

Page 2: Pged 04

2

Objetivos

§ Explorar conceitos importantes acerca das listas listas 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

Page 3: Pged 04

3

Motivação

§ Você deve lembrar que a estrutura lista encadeada, vista no módulo anterior, caracterizava-se por um encadeamento simples entre os elementos§ Havia a alocação dinâmica de cada elemento§ Cada elemento armazenava um único ponteiro para o

próximo elemento da lista

§ Lembre-se que esta estrutura resolveu algumas das limitações encontradas nas listas seqüenciais§ Pré-dimensionamento da lista§ Sub-utilização de memória

§ Porém, você pode ter notado que...

Page 4: Pged 04

4

Desvantagens Lista Encadeada

� Em uma lista encadeada simples, não temos como percorrer eficientemente os elementos em ordemordeminversainversa, isto é, do final para o início da lista� O encadeamento simples também dificultava a

remoçãoremoção de um elemento da lista. Veja abaixo:/* Parâmetros: lista = a lis

dado = passa

posição = pos

Retorno: 1 em caso de suce

*/

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 como Isso 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 foi Note, na função de remoção, que a solução encontrada foi declarar uma variável somente para podermos guardar o declarar 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.

Page 5: Pged 04

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

LJoão Maria Ana Edu

Page 6: Pged 04

6

Vantagens

§ Isto trará novas oportunidades ao novo TAD:� Dado um elemento, poderemos acessar ambos

elementos adjacentes: o próximo e o anterior

� O ponteiro para o elemento anterior, bem como o endereço do próximo elemento serão manipulados diretamente

� Inserção à direita e à esquerda de um nó qualquer

� Se tivermos um ponteiro para o último elemento da lista, poderemos percorrê-la na ordem inversa

�Também utilizará a memória de maneira eficiente com alocação dinâmica como fez o TAD do módulo anterior

Page 7: Pged 04

7

§ 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 *pOnde:Onde:pp-->dado;>dado;pp-->>proxprox;;pp-->ant;>ant;

dado proxant

Page 8: Pged 04

8

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áestá vaziavazia� 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

Page 9: Pged 04

9

Algoritmos em C

§ O que deverá ser feito pelo aluno:§ Escolha e instalação do ambiente a ser trabalhado no

laboratório§ Modelagem deste TAD (dados e operações)§ Implementação dos algoritmos de operações básicas

vistos em sala de aula na linguagem C§ Utilização das regras de modelagem vistas no módulo

anterior (criação de bibliotecas) e modularização§ Implantação de código legível e bem documentado§ Nomes de variáveis condizentes com o problema§ Prática de laboratório

Page 10: Pged 04

10

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 prpráática de tica de

laboratlaboratóó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!