A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Listas Encadeadas CONTEÚDO (1) Motivação (2) Definição (3) Operações

Apresentações semelhantes


Apresentação em tema: "Listas Encadeadas CONTEÚDO (1) Motivação (2) Definição (3) Operações"— Transcrição da apresentação:

1 Listas Encadeadas CONTEÚDO (1) Motivação (2) Definição (3) Operações
(4) Comparando Vetores e Listas Ligadas (5) Lista Circular (6) Lista Duplamente Encadeada

2 ... Prever o número máximo de elementos no vetor durante a codificação
(1) Motivação Motivação... Prever o número máximo de elementos no vetor durante a codificação dimensionar o vetor com um número absurdamente alto isto levaria a um desperdício de memória que é inaceitável em diversas aplicações E se tivermos mais de 700 reservas simultâneas? RESERVAS AÉREAS ... nome nome nome nome nome e-ticket e-ticket e-ticket e-ticket e-ticket

3 Algumas aplicações requerem a inserção/deleção constantes de elementos
(1) Motivação Solução Algumas aplicações requerem a inserção/deleção constantes de elementos Solução: Usar listas ligadas Dado Dado Dado Dado /

4 Uma lista é uma estrutura de dados dinâmica.
(2) Definição Listas Uma lista é uma estrutura de dados dinâmica. O número de nós de uma lista pode variar consideravelmente à medida que elementos são inseridos ou removidos. A natureza dinâmica de uma lista pode ser comparada à natureza estática de um vetor, cujo tamanho permanece constante.

5 Lista Simplesmente Encadeada
(2) Definição Lista Simplesmente Encadeada É uma estrutura de dados concreta que consiste de uma seqüência de nós Cada nó armazena O conteúdo do elemento Uma ligação para o próximo nó próximo dado A B C D

6 Possui os campos de informação
(2) Definição O tipo Nó Possui os campos de informação Possui um campo de ligação com o próximo elemento do tipo Nó As operações sobre nó são: Atualiza informação Atualiza próximo Recupera informação Recupera próximo próximo dado

7 Exemplo: Reserva Aérea
(2) Definição Exemplo: Reserva Aérea Ex: #include <stdlib.h> #include <stdio.h> typedef struct eReserva { char nome[60]; char e_ticket[20]; struct eReserva *prox; } tReserva; main(){ tReserva *cabeca, *segundoNo, *terceiroNo; cabeca = (tReserva *) malloc(sizeof(tReserva)); cabeca->prox = NULL; segundoNo = (tReserva *) malloc(sizeof(tReserva)); cabeca->prox = segundoNo; segundoNo->prox = NULL; terceiroNo = (tReserva *) malloc(sizeof(tReserva)); segundoNo->prox = aux; terceiroNo->prox = NULL; } struct eReserva nome e-ticket NULL tReserva cabeca segundoNo terceiroNo nome e-ticket prox nome e-ticket prox nome e-ticket NULL

8 Possui um campo que representa o número total de nós da lista.
(2) Definição O tipo Lista Encadeada Possui um campo que referencia o início da lista (também chamado de cabeça da lista) Possui um campo que representa o número total de nós da lista. As operações sobre lista encadeada são: Inserir nó no início Inserir nó no fim Inserir nó no meio Remover nó no início Remover nó no fim Remover nó no meio

9 Inserir nó no início da lista
(3) Operações Inserir nó no início da lista Aloque um novo nó Faça o campo próximo do novo nó apontar para o nó cabeça da lista Atualize o campo que aponta para a cabeça para apontar para o novo nó

10 Inserir um nó no fim da lista
(3) Operações Localize a cauda da lista Aloque um novo nó Faça o campo próximo do novo nó apontar para null Faça o campo próximo do nó cauda apontar para o novo nó

11 Inserir um nó no meio da lista
(3) Operações Inserir um nó no meio da lista Use uma variável auxiliar do tipo Nó para localizar o nó “V” após o qual se deseja inserir o novo nó Aloque um novo nó Faça o campo próximo do novo nó apontar para o nó apontado pelo campo próximo do nó “V” Faça o campo próximo do nó “V” apontar para o novo nó V

12 Remover um nó da cabeça da lista
(3) Operações Remover um nó da cabeça da lista Use uma variável auxiliar do tipo Nó para apontar para a cabeça da lista Atualize o campo que aponta para a cabeça da lista para apontar para o próximo nó na lista Desaloque o nó da variável auxiliar.

13 Remover um nó da cauda da lista
(3) Operações Remover um nó da cauda da lista Use uma variável auxiliar do tipo Nó para localizar o penúltimo nó da lista Use uma outra variável auxiliar do tipo Nó para apontar para a cauda da lista Coloque o campo próximo do penúltimo nó da lista para null Desaloque o último nó

14 Remover um nó do meio da lista
(3) Operações Remover um nó do meio da lista Use uma variável auxiliar do tipo Nó para localizar o nó anterior “V” ao nó a ser removido da lista Use uma outra variável auxiliar do tipo Nó para apontar para o nó “W” a ser removido da lista Faça o campo próximo do nó “V” apontar para o nó apontado pelo campo próximo do nó a ser removido da lista Desaloque o nó “W” V W

15 (4) Comparando vetores e listas ligadas
Forma de acesso Um item é acessado numa lista encadeada, percorrendo-se a lista a partir do início, porque não existe relação entre a posição de memória ocupada por um elemento de uma lista e sua posição dentro dessa lista. Um item é acessado num vetor através de uma única operação (usando o índice) Dado 1 2 3 Dado Dado Dado Dado /

16 Por outro lado o vetor não é uma estrutura de dados muito flexível
(4) Comparando vetores e listas ligadas Flexibilidade Por outro lado o vetor não é uma estrutura de dados muito flexível É preciso dimensioná-lo com um número máximo de elementos Se o número de elementos que precisarmos armazenar exceder a dimensão do vetor, teremos um problema Se o número de elementos que precisarmos armazenar no vetor for muito inferior à sua dimensão, estaremos subutilizando o espaço de memória reservado Se precisarmos retirar ou inserir um elemento no meio do vetor, teremos de deslocar alguns elementos do vetor

17 (5) Lista Circular Lista Circular O campo próximo do último nó aponta de volta para o primeiro nó, em vez de apontar para null. Não tem um "primeiro" ou um "último" nó natural. É preciso estabelecer um primeiro e um último nó por convenção. Uma variável auxiliar do tipo Nó aponta para o último nó e o nó seguinte se torna o primeiro nó Se a variável auxiliar do tipo Nó apontar para null então a lista circular está vazia Dado Dado Dado Dado

18 Lista Circular - Limitações
Não se pode atravessar uma lista desse tipo no sentido contrário Para eliminar um nó de uma lista circularmente ligada, é preciso usar pelo menos uma variável auxiliar do tipo Nó A solução é usar Lista Duplamente Encadeada

19 Lista Duplamente Encadeada
O encadeamento simples também dificulta a retirada de um elemento da lista Temos que percorrer a lista, elemento por elemento, para encontrarmos o elemento anterior àquele que queremos eliminar. A solução é usar uma lista duplamente encadeada Dado Dado Dado Dado

20 Lista Duplamente Encadeada
ant prox Cada nó armazena : O conteúdo do elemento A ligação para o próximo nó A ligação para o nó anterior dado

21 Inserir novo elemento na lista
(6) Lista Duplamente Encadeada Inserir novo elemento na lista p A B C p A B C q X p q A B X C

22 Remover elemento na lista
(6) Lista Duplamente Encadeada Remover elemento na lista p A B C D E A B C E p D A B C E

23 (6) Lista Duplamente Encadeada
Exercício Escreva o pseudo-código para as operações de inserir e remover um elemento em lista duplamente encadeada


Carregar ppt "Listas Encadeadas CONTEÚDO (1) Motivação (2) Definição (3) Operações"

Apresentações semelhantes


Anúncios Google