Carregar apresentação
A apresentação está carregando. Por favor, espere
1
Algoritmos e Estruturas de Dados
Listas Encadeadas Prof. Me. Claudio Benossi
2
Listas Encadeadas Listas encadeadas ou listas ligadas representam uma seqüência de objetos na memória do computador. Exemplo: Lista de afazeres Comprar uma lâmpada Trocar uma lâmpada queimada Procurar uma conta no quarto Pagar uma conta na internet Desligar o computador Dormir
3
Listas Encadeadas Na lista de afazeres anterior, uma tarefa dependia da execução da tarefa anterior Próxima ação Ação atual
4
Listas Encadeadas 2 3 4 5 6 fim 1. Comprar lâmpada 2. Trocar lâmpada
3. Procurar conta 5 4. Pagar conta 6 5. Desligar micro fim 6. Dormir
5
Listas Encadeadas :: Representação por vetores
Como representar a lista anterior em um programa escrito na Linguagem C? Primeira opção: vetores ou matrizes Comprar lâmpada Trocar lâmpada Procurar conta Pagar conta Desligar micro Dormir Tarefa: Índice:
6
Listas Encadeadas :: Representação por vetores
Primeira opção: vetores ou matrizes Como acrescentar “Ligar micro”? Comprar lâmpada Trocar lâmpada Procurar conta Ligar micro Dormir Desligar micro Pagar conta Tarefa: Índice: 7
7
Listas Encadeadas :: Representação por vetores
Primeira opção: vetores ou matrizes Os itens da lista são armazenados em posições contíguas de memória. A lista pode ser percorrida em qualquer direção. A inserção de um novo item pode ser realizada após o último item com custo constante. A inserção de um novo item no meio da lista requer um deslocamento de todos os itens localizados após o ponto de inserção. Retirar um item do início da lista requer um deslocamento de itens para preencher o espaço deixado vazio.
8
Listas Encadeadas :: Representação por ponteiros
Segunda opção: ponteiros Estruturas de dados dinâmicas: estruturas de dados que contém ponteiros para si próprias. struct lista { char nome_tarefa[30]; float duracao; char responsavel[30]; ... struct lista *prox; }; ponteiro para a própria estrutura lista
9
Listas Encadeadas :: Representação por ponteiros
Representação gráfica de um elemento da lista: Cada item é encadeado com o seguinte, mediante uma variável do tipo ponteiro. Permite utilizar posições não contíguas de memória. É possível inserir e retirar elementos sem necessidade de deslocar os itens seguintes da lista. campos de informação próximo nó
10
Listas Encadeadas :: Representação por ponteiros
Cada item em particular de uma lista pode ser chamado de elemento, nó, célula, ou item. O apontador para o início da lista também é tratado como se fosse uma célula (cabeça), para simplificar as operações sobre a lista. O símbolo / representa o ponteiro nulo (NULL), indicando o fim da lista. p 3 5 2 4 / 162
11
Operações sobre lista encadeada
Podemos realizar algumas operações sobre uma lista encadeadas, tais como: Inserir itens; Retirar itens; Buscar itens. Para manter a lista ordenada, após realizar alguma dessas operações, será necessário apenas movimentar alguns ponteiros (de um a três elementos).
12
Operações sobre lista encadeada
Outras operações possíveis: Criar uma lista Destruir uma lista Ordenar uma lista Intercalar duas listas Concatenar duas listas Dividir uma lista em duas Copiar uma lista em outra
13
Operações sobre lista encadeada :: Inserção de itens
Podemos inserir itens: No começo de uma lista No final de uma lista No meio de uma lista
14
Operações sobre lista encadeada :: Inserção de itens no início
O endereço armazenado no ponteiro p deve ser alterado para o endereço do item a ser acrescido à lista. p 5 2 / 4 3 163
15
Operações sobre lista encadeada :: Inserção de itens no final
O endereço armazenado em p será alterado caso a lista esteja vazia ou O campo prox do último item será alterado. / / 3 p 3 / 5 p 164
16
Operações sobre lista encadeada :: Inserção de itens no meio
Campo prox do item a ser inserido recebe o campo prox do item posterior Campo prox do item antecessor recebe o endereço do item a ser inserido p 3 2 / 4 5 lista[5].prox ← lista[2] lista[3].prox ← 5 165
17
Operações sobre lista encadeada :: Remoção de itens no início
O endereço armazenado no ponteiro p deve ser alterado para o endereço do item que segue o primeiro item da lista. p 5 2 / 4 166
18
Operações sobre lista encadeada :: Remoção de itens no final
O campo prox do último item será alterado caso a lista contenha mais de um item ou O endereço armazenado em p será alterado para NULL. 3 / 5 p / 3 p / 167
19
Operações sobre lista encadeada :: Remoção de itens no meio
Item antecessor recebe o campo prox do item a ser removido lista[3].prox ← lista[5].prox p 3 5 2 / 4 168
20
Um outro exemplo O programa abaixo... 169
21
Outros tipos de Listas Encadeadas
Existem ainda outras variações de lista encadeada, dentre elas: Listas Duplamente Encadeadas Listas Circulares
22
Listas Duplamente Encadeadas
Cada elemento da lista é ligado a seu sucessor e a seu predecessor. Possibilita um trajeto em ambos os sentidos, simplificando o gerenciamento da lista.
23
Listas Duplamente Encadeadas
A estrutura de dados de um nó de uma lista duplamente encadeada recebe um novo campo: um ponteiro para o nó antecessor. typedef struct noh { int info; struct noh *ant; struct noh *prox; } tipoNode; 170
24
Listas Circulares São listas encadeadas cujo fim aponta para o seu início, formando um círculo que permite uma trajetória contínua na lista. Podem ser: Singularmente encadeadas Duplamente encadeadas
25
Listas Circulares A estrutura de um nó de uma lista circular permanece a mesma. Dependerá apenas se o encadeamento da lista é duplo ou singular. O que modifica é que não há mais necessidade de dois ponteiros para indicar o início e o fim da lista. Basta marcar um nó da lista para evitar loops. 171
26
Questões
Apresentações semelhantes
© 2024 SlidePlayer.com.br Inc.
All rights reserved.