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

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

Algoritmos e Estruturas de Dados Listas Encadeadas Prof. Me. Claudio Benossi

Apresentações semelhantes


Apresentação em tema: "Algoritmos e Estruturas de Dados Listas Encadeadas Prof. Me. Claudio Benossi"— 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. Listas encadeadas ou listas ligadas representam uma seqüência de objetos na memória do computador. Exemplo: Lista de afazeres Exemplo: Lista de afazeres 1.Comprar uma lâmpada 2.Trocar uma lâmpada queimada 3.Procurar uma conta no quarto 4.Pagar uma conta na internet 5.Desligar o computador 6.Dormir

3 Listas Encadeadas Próxima ação Ação atual Na lista de afazeres anterior, uma tarefa dependia da execução da tarefa anterior Na lista de afazeres anterior, uma tarefa dependia da execução da tarefa anterior

4 Listas Encadeadas 2 1. Comprar lâmpada 3 2. Trocar lâmpada 4 3. Procurar conta 5 4. Pagar conta 6 5. Desligar micro fim 6. Dormir

5 Dormir Desligar micro Pagar conta Procurar conta Trocar lâmpada Listas Encadeadas :: Representação por vetores Como representar a lista anterior em um programa escrito na Linguagem C? Como representar a lista anterior em um programa escrito na Linguagem C? Primeira opção: vetores ou matrizes Primeira opção: vetores ou matrizes Comprar lâmpada Tarefa: Índice:

6 Listas Encadeadas :: Representação por vetores Primeira opção: vetores ou matrizes Primeira opção: vetores ou matrizes Como acrescentar Ligar micro? Como acrescentar Ligar micro? Dormir Desligar micro Pagar conta Ligar micro Procurar conta Trocar lâmpada Comprar lâmpada Tarefa: Índice:

7 Listas Encadeadas :: Representação por vetores Primeira opção: vetores ou matrizes Primeira opção: vetores ou matrizes Os itens da lista são armazenados em posições contíguas de memória. 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 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 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. 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. 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 Segunda opção: ponteiros Estruturas de dados dinâmicas: estruturas de dados que contém ponteiros para si próprias. 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; }; struct lista { char nome_tarefa[30]; float duracao; char responsavel[30];... struct lista *prox; }; ponteiro para a própria estrutura lista

9 campos de informação Listas Encadeadas :: Representação por ponteiros Representação gráfica de um elemento da lista: Representação gráfica de um elemento da lista: Cada item é encadeado com o seguinte, mediante uma variável do tipo ponteiro. Cada item é encadeado com o seguinte, mediante uma variável do tipo ponteiro. Permite utilizar posições não contíguas de memória. 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. É possível inserir e retirar elementos sem necessidade de deslocar os itens seguintes da lista. 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. 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 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. O símbolo / representa o ponteiro nulo (NULL), indicando o fim da lista. 3 5 p 2 / 4 162

11 Operações sobre lista encadeada Podemos realizar algumas operações sobre uma lista encadeadas, tais como: Podemos realizar algumas operações sobre uma lista encadeadas, tais como: Inserir itens; Inserir itens; Retirar itens; Retirar itens; Buscar 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). 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: Outras operações possíveis: Criar uma lista Criar uma lista Destruir uma lista Destruir uma lista Ordenar uma lista Ordenar uma lista Intercalar duas listas Intercalar duas listas Concatenar duas listas Concatenar duas listas Dividir uma lista em duas Dividir uma lista em duas Copiar uma lista em outra Copiar uma lista em outra

13 Operações sobre lista encadeada :: Inserção de itens Podemos inserir itens: Podemos inserir itens: No começo de uma lista No começo de uma lista No final de uma lista No final de uma lista No meio de uma lista No meio de uma lista

14 p 52 / 4 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. O endereço armazenado no ponteiro p deve ser alterado para o endereço do item a ser acrescido à lista

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 endereço armazenado em p será alterado caso a lista esteja vazia ou O campo prox do último item será alterado. 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 a ser inserido recebe o campo prox do item posterior Campo prox do item antecessor recebe o endereço do item a ser inserido Campo prox do item antecessor recebe o endereço do item a ser inserido / 453 p lista[5].prox lista[2] lista[3].prox 5 lista[5].prox lista[2] lista[3].prox 5

17 p 52 / 4 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. O endereço armazenado no ponteiro p deve ser alterado para o endereço do item que segue o primeiro item da lista. 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 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. O endereço armazenado em p será alterado para NULL. / 3 p / 3 / 5 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 Item antecessor recebe o campo prox do item a ser removido / 43 p lista[3].prox lista[5].prox

20 Um outro exemplo O programa abaixo... O programa abaixo

21 Outros tipos de Listas Encadeadas Existem ainda outras variações de lista encadeada, dentre elas: Existem ainda outras variações de lista encadeada, dentre elas: Listas Duplamente Encadeadas Listas Duplamente Encadeadas Listas Circulares Listas Circulares

22 Listas Duplamente Encadeadas Cada elemento da lista é ligado a seu sucessor e a seu predecessor. Cada elemento da lista é ligado a seu sucessor e a seu predecessor. Possibilita um trajeto em ambos os sentidos, simplificando o gerenciamento da lista. Possibilita um trajeto em ambos os sentidos, simplificando o gerenciamento da lista.

23 Listas Duplamente Encadeadas typedef struct noh { int info; struct noh *ant; struct noh *prox; } tipoNode; typedef struct noh { int info; struct noh *ant; struct noh *prox; } tipoNode; A estrutura de dados de um nó de uma lista duplamente encadeada recebe um novo campo: um ponteiro para o nó antecessor. A estrutura de dados de um nó de uma lista duplamente encadeada recebe um novo campo: um ponteiro para o nó antecessor. 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: 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 Singularmente encadeadas Duplamente 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. 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. 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. Basta marcar um nó da lista para evitar loops. 171

26 QuestõesQuestões


Carregar ppt "Algoritmos e Estruturas de Dados Listas Encadeadas Prof. Me. Claudio Benossi"

Apresentações semelhantes


Anúncios Google