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

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

Algoritmos e Estruturas de Dados

Apresentações semelhantes


Apresentação em tema: "Algoritmos e Estruturas de Dados"— Transcrição da apresentação:

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


Carregar ppt "Algoritmos e Estruturas de Dados"

Apresentações semelhantes


Anúncios Google