27
Algoritmos e Estruturas de Dados II IEC013 Revisão: Listas Revisão: Listas Encadeadas Encadeadas Prof. César Melo Todos os créditos reservados ao professor Leandro Galvão

Algoritmos e Estruturas de Dados II IEC013 Revisão: Listas ... · A estrutura de dados de um nó de uma lista duplamente encadeada recebe um novo campo: um ponteiro para o nó antecessor

Embed Size (px)

Citation preview

Page 1: Algoritmos e Estruturas de Dados II IEC013 Revisão: Listas ... · A estrutura de dados de um nó de uma lista duplamente encadeada recebe um novo campo: um ponteiro para o nó antecessor

Algoritmos e Estruturas de Dados IIIEC013

Revisão: Listas Revisão: Listas EncadeadasEncadeadas

Prof. César Melo

Todos os créditos reservados ao professor Leandro Galvão

Page 2: Algoritmos e Estruturas de Dados II IEC013 Revisão: Listas ... · A estrutura de dados de um nó de uma lista duplamente encadeada recebe um novo campo: um ponteiro para o nó antecessor

Listas EncadeadasListas Encadeadas

Listas encadeadasListas encadeadas ou listas ligadas ou listas ligadas representam uma seqüência de objetos representam uma seqüência de objetos na memória do computador.na memória do computador.

Exemplo: Exemplo: Lista de afazeresLista de afazeres1.1. Comprar uma lâmpadaComprar uma lâmpada

2.2. Trocar uma lâmpada queimadaTrocar uma lâmpada queimada

3.3. Procurar uma conta no quartoProcurar uma conta no quarto

4.4. Pagar uma conta na internetPagar uma conta na internet

5.5. Desligar o computadorDesligar o computador

6.6. DormirDormir

Page 3: Algoritmos e Estruturas de Dados II IEC013 Revisão: Listas ... · A estrutura de dados de um nó de uma lista duplamente encadeada recebe um novo campo: um ponteiro para o nó antecessor

Listas EncadeadasListas Encadeadas

PróximaaçãoAção atualAção atual

Na lista de afazeres anterior, uma tarefa Na lista de afazeres anterior, uma tarefa dependia da execução da tarefa anteriordependia da execução da tarefa anterior

Page 4: Algoritmos e Estruturas de Dados II IEC013 Revisão: Listas ... · A estrutura de dados de um nó de uma lista duplamente encadeada recebe um novo campo: um ponteiro para o nó antecessor

Listas EncadeadasListas Encadeadas

21. 1. ComprarComprar lâmpadalâmpada

32. Trocar 2. Trocar lâmpadalâmpada

43. 3. ProcurarProcurar contaconta

54. Pagar 4. Pagar contaconta

65. 5. DesligarDesligar micromicro

fim6. Dormir6. Dormir

Page 5: Algoritmos e Estruturas de Dados II IEC013 Revisão: Listas ... · A estrutura de dados de um nó de uma lista duplamente encadeada recebe um novo campo: um ponteiro para o nó antecessor

DormirDormirDesligar Desligar

micromicroPagar Pagar contaconta

Procurar Procurar contaconta

Trocar Trocar lâmpadalâmpada

Listas EncadeadasListas Encadeadas:: Representação por :: Representação por vetoresvetores

Como representar a lista anterior em um Como representar a lista anterior em um programa escrito na Linguagem C?programa escrito na Linguagem C?

Primeira opção: vetores ou matrizesPrimeira opção: vetores ou matrizes

Comprar Comprar lâmpadalâmpada

Tarefa:

Índice: 1 2 3 4 5 6

Page 6: Algoritmos e Estruturas de Dados II IEC013 Revisão: Listas ... · A estrutura de dados de um nó de uma lista duplamente encadeada recebe um novo campo: um ponteiro para o nó antecessor

Listas EncadeadasListas Encadeadas:: Representação por :: Representação por vetoresvetores

Primeira opção: vetores ou matrizesPrimeira opção: vetores ou matrizes

Como acrescentar Como acrescentar “Ligar micro”“Ligar micro”??

DormirDormirDesligar Desligar

micromicroPagar Pagar contacontaLigar Ligar micromicro

Procurar Procurar contaconta

Trocar Trocar lâmpadalâmpada

Comprar Comprar lâmpadalâmpada

Tarefa:

Índice: 1 2 3 4 5 6 7

Page 7: Algoritmos e Estruturas de Dados II IEC013 Revisão: Listas ... · A estrutura de dados de um nó de uma lista duplamente encadeada recebe um novo campo: um ponteiro para o nó antecessor

Listas EncadeadasListas Encadeadas:: Representação por :: Representação por vetoresvetores

Primeira opção: vetores ou matrizesPrimeira opção: vetores ou matrizes Os itens da lista são armazenados em posições Os itens da lista são armazenados em posições

adjacentesadjacentes na memória. na 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 A inserção de um novo item pode ser realizada após o último item com custo constante.após o último item com custo constante.

A inserção de um novo item no A inserção de um novo item no meio da listameio da lista requer um requer um deslocamento de todos os itens deslocamento de todos os itens localizados após o ponto de inserção.localizados após o ponto de inserção.

Retirar um item do início da lista requer um Retirar um item do início da lista requer um deslocamento de itens para preencher o espaço deslocamento de itens para preencher o espaço deixado vazio.deixado vazio.

Page 8: Algoritmos e Estruturas de Dados II IEC013 Revisão: Listas ... · A estrutura de dados de um nó de uma lista duplamente encadeada recebe um novo campo: um ponteiro para o nó antecessor

Listas EncadeadasListas Encadeadas:: Representação por :: Representação por ponteirosponteiros

Segunda opção: ponteirosSegunda opção: ponteiros

Estruturas de dados dinâmicasEstruturas de dados dinâmicas: estruturas de : estruturas de dados que contém ponteiros para si próprias.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

Page 9: Algoritmos e Estruturas de Dados II IEC013 Revisão: Listas ... · A estrutura de dados de um nó de uma lista duplamente encadeada recebe um novo campo: um ponteiro para o nó antecessor

campos de informação

Listas EncadeadasListas Encadeadas:: Representação por :: Representação por ponteirosponteiros

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 Cada item é encadeado com o seguinte, mediante uma variável do tipo variável do tipo ponteiroponteiro..

Permite utilizar Permite utilizar posições não adjacentes posições não adjacentes de memória.de memória.

É possível inserir e retirar elementos É possível inserir e retirar elementos sem necessidade sem necessidade de deslocar de deslocar os itens seguintes da lista.os itens seguintes da lista.

próximo nó

Page 10: Algoritmos e Estruturas de Dados II IEC013 Revisão: Listas ... · A estrutura de dados de um nó de uma lista duplamente encadeada recebe um novo campo: um ponteiro para o nó antecessor

Listas EncadeadasListas Encadeadas:: Representação por :: Representação por ponteirosponteiros

Cada item em particular de uma lista pode ser Cada item em particular de uma lista pode ser chamado de chamado de elementoelemento, , nónó, , célulacélula, ou , ou itemitem..

O apontador para o início da lista também é O apontador para o início da lista também é tratado como se fosse uma célula (tratado como se fosse uma célula (cabeçacabeça), para ), para simplificar as operações sobre a lista.simplificar as operações sobre a lista.

O símbolo O símbolo // representa o ponteiro nulo ( representa o ponteiro nulo (NULLNULL), ), indicando o fim da lista.indicando o fim da lista.

3 5p

2 /4

162

Page 11: Algoritmos e Estruturas de Dados II IEC013 Revisão: Listas ... · A estrutura de dados de um nó de uma lista duplamente encadeada recebe um novo campo: um ponteiro para o nó antecessor

Operações sobre lista encadeadaOperações sobre lista encadeada

Podemos realizar algumas operações Podemos realizar algumas operações sobre uma lista encadeadas, tais como:sobre uma lista encadeadas, tais como: InserirInserir itens; itens;RetirarRetirar itens; itens;Buscar Buscar itens.itens.

Para manter a lista ordenada, após Para manter a lista ordenada, após realizar alguma dessas operações, será realizar alguma dessas operações, será necessário apenas necessário apenas movimentar alguns movimentar alguns ponteiros ponteiros (de um a três elementos).(de um a três elementos).

Page 12: Algoritmos e Estruturas de Dados II IEC013 Revisão: Listas ... · A estrutura de dados de um nó de uma lista duplamente encadeada recebe um novo campo: um ponteiro para o nó antecessor

Operações sobre lista encadeadaOperações sobre lista encadeada

Outras operações possíveis:Outras operações possíveis:CriarCriar uma lista uma listaDestruirDestruir uma lista uma listaOrdenarOrdenar uma lista uma listaIntercalarIntercalar duas listas duas listasConcatenarConcatenar duas listas duas listasDividirDividir uma lista em duas uma lista em duasCopiarCopiar uma lista em outra uma lista em outra

Page 13: Algoritmos e Estruturas de Dados II IEC013 Revisão: Listas ... · A estrutura de dados de um nó de uma lista duplamente encadeada recebe um novo campo: um ponteiro para o nó antecessor

Operações sobre lista encadeadaOperações sobre lista encadeada:: :: InserçãoInserção de itens de itens

Podemos inserir itens:Podemos inserir itens:NoNo começo começo de uma listade uma listaNo No final final de uma listade uma listaNoNo meio meio de uma listade uma lista

Page 14: Algoritmos e Estruturas de Dados II IEC013 Revisão: Listas ... · A estrutura de dados de um nó de uma lista duplamente encadeada recebe um novo campo: um ponteiro para o nó antecessor

p 5 2 /4

Operações sobre lista encadeadaOperações sobre lista encadeada:: :: InserçãoInserção de itens no de itens no inícioinício

O endereço armazenado no ponteiro O endereço armazenado no ponteiro p p deve ser alterado para o endereço do item deve ser alterado para o endereço do item a ser acrescido à lista.a ser acrescido à lista.

163

3

Page 15: Algoritmos e Estruturas de Dados II IEC013 Revisão: Listas ... · A estrutura de dados de um nó de uma lista duplamente encadeada recebe um novo campo: um ponteiro para o nó antecessor

Operações sobre lista encadeadaOperações sobre lista encadeada:: :: InserçãoInserção de itens no de itens no finalfinal

O endereço armazenado em O endereço armazenado em pp será será alterado caso a lista esteja vazia oualterado caso a lista esteja vazia ou

O campo O campo proxprox do último item será do último item será alterado.alterado.

/3p

/

3 /5p

164

Page 16: Algoritmos e Estruturas de Dados II IEC013 Revisão: Listas ... · A estrutura de dados de um nó de uma lista duplamente encadeada recebe um novo campo: um ponteiro para o nó antecessor

Operações sobre lista encadeadaOperações sobre lista encadeada:: :: InserçãoInserção de itens no de itens no meiomeio

Campo Campo proxprox do item a ser inserido recebe do item a ser inserido recebe o campo o campo proxprox do item posterior do item posterior

Campo Campo proxprox do item antecessor recebe o do item antecessor recebe o endereço do item a ser inseridoendereço do item a ser inserido

165

2 /4

5

3p

lista[5].prox ← lista[2]

lista[3].prox ← 5

lista[5].prox ← lista[2]

lista[3].prox ← 5

Page 17: Algoritmos e Estruturas de Dados II IEC013 Revisão: Listas ... · A estrutura de dados de um nó de uma lista duplamente encadeada recebe um novo campo: um ponteiro para o nó antecessor

p 5 2 /4

Operações sobre lista encadeadaOperações sobre lista encadeada:: :: RemoçãoRemoção de itens no de itens no inícioinício

O endereço armazenado no ponteiro O endereço armazenado no ponteiro p p deve ser alterado para o endereço do item deve ser alterado para o endereço do item que segue o primeiro item da lista.que segue o primeiro item da lista.

166

Page 18: Algoritmos e Estruturas de Dados II IEC013 Revisão: Listas ... · A estrutura de dados de um nó de uma lista duplamente encadeada recebe um novo campo: um ponteiro para o nó antecessor

Operações sobre lista encadeadaOperações sobre lista encadeada:: :: RemoçãoRemoção de itens no de itens no finalfinal

O campo O campo proxprox do último item será do último item será alterado caso a lista contenha mais de um alterado caso a lista contenha mais de um item ouitem ou

O endereço armazenado em O endereço armazenado em pp será será alterado para alterado para NULLNULL..

/3p

/

3 /5p

167

Page 19: Algoritmos e Estruturas de Dados II IEC013 Revisão: Listas ... · A estrutura de dados de um nó de uma lista duplamente encadeada recebe um novo campo: um ponteiro para o nó antecessor

Operações sobre lista encadeadaOperações sobre lista encadeada:: :: RemoçãoRemoção de itens no de itens no meiomeio

Item antecessor recebe o campo Item antecessor recebe o campo proxprox do do item a ser removidoitem a ser removido

168

5 2 /43p

lista[3].prox ← lista[5].prox

lista[3].prox ← lista[5].prox

Page 20: Algoritmos e Estruturas de Dados II IEC013 Revisão: Listas ... · A estrutura de dados de um nó de uma lista duplamente encadeada recebe um novo campo: um ponteiro para o nó antecessor

Outros tipos de Listas EncadeadasOutros tipos de Listas Encadeadas

Existem ainda outras variações de lista Existem ainda outras variações de lista encadeada, dentre elas:encadeada, dentre elas:

Listas Listas Duplamente EncadeadasDuplamente Encadeadas

Listas Listas CircularesCirculares

Page 21: Algoritmos e Estruturas de Dados II IEC013 Revisão: Listas ... · A estrutura de dados de um nó de uma lista duplamente encadeada recebe um novo campo: um ponteiro para o nó antecessor

Listas Duplamente EncadeadasListas Duplamente Encadeadas

Cada elemento da lista é ligado a seu Cada elemento da lista é ligado a seu sucessor e a seu predecessor.sucessor e a seu predecessor.

Possibilita um trajeto em ambos os Possibilita um trajeto em ambos os sentidos, simplificando o gerenciamento sentidos, simplificando o gerenciamento da lista.da lista.

Page 22: Algoritmos e Estruturas de Dados II IEC013 Revisão: Listas ... · A estrutura de dados de um nó de uma lista duplamente encadeada recebe um novo campo: um ponteiro para o nó antecessor

Listas Duplamente EncadeadasListas Duplamente Encadeadas

typedef struct elemento TElemento;struct elemento {

int nro;TElemento *ant;TElemento *prox;

};

typedef struct elemento TElemento;struct elemento {

int nro;TElemento *ant;TElemento *prox;

};

A estrutura de dados de um nó de uma A estrutura de dados de um nó de uma lista duplamente encadeada recebe um lista duplamente encadeada recebe um novo campo: um novo campo: um ponteiro para o nó ponteiro para o nó antecessorantecessor..

170

Page 23: Algoritmos e Estruturas de Dados II IEC013 Revisão: Listas ... · A estrutura de dados de um nó de uma lista duplamente encadeada recebe um novo campo: um ponteiro para o nó antecessor

Listas Duplamente EncadeadasListas Duplamente Encadeadas

Vantagens:

Facilitar as operações de manuseio dos Facilitar as operações de manuseio dos elementos da lista;elementos da lista;

Caminhar em ambas as direçõesCaminhar em ambas as direções

Desvantagem:Desvantagem:

Espaço a mais para armazenar um outro Espaço a mais para armazenar um outro ponteiro;ponteiro;

Considere as operações de inserção, Considere as operações de inserção, inserção ordenada, e remoção;inserção ordenada, e remoção;

170

Page 24: Algoritmos e Estruturas de Dados II IEC013 Revisão: Listas ... · A estrutura de dados de um nó de uma lista duplamente encadeada recebe um novo campo: um ponteiro para o nó antecessor

Listas CircularesListas Circulares

São listas encadeadas cujo fim aponta São listas encadeadas cujo fim aponta para o seu início, formando um círculo que para o seu início, formando um círculo que permite uma trajetória contínua na lista. permite uma trajetória contínua na lista. Podem ser:Podem ser:

Singularmente encadeadasSingularmente encadeadas

Duplamente encadeadasDuplamente encadeadas

Page 25: Algoritmos e Estruturas de Dados II IEC013 Revisão: Listas ... · A estrutura de dados de um nó de uma lista duplamente encadeada recebe um novo campo: um ponteiro para o nó antecessor

Listas CircularesListas Circulares

A estrutura de um nó de uma lista circular A estrutura de um nó de uma lista circular permanece a mesma. Dependerá apenas permanece a mesma. Dependerá apenas se o encadeamento da lista é duplo ou se o encadeamento da lista é duplo ou singular.singular.

O que modifica é que O que modifica é que não há mais não há mais necessidade de dois ponteiros para indicar necessidade de dois ponteiros para indicar o início e o fim da listao início e o fim da lista..

Basta marcar um nó da lista para evitar Basta marcar um nó da lista para evitar loops.loops.

171

Page 26: Algoritmos e Estruturas de Dados II IEC013 Revisão: Listas ... · A estrutura de dados de um nó de uma lista duplamente encadeada recebe um novo campo: um ponteiro para o nó antecessor

ExercícioExercício

Considere o seguinte problema que deve Considere o seguinte problema que deve ser implementado em uma lista ser implementado em uma lista simplesmente encadeada;simplesmente encadeada;

Uma sequência de números Deve ser Uma sequência de números Deve ser armazenada em uma lista;armazenada em uma lista;

Pede-se que os elementos dessa lista sejam Pede-se que os elementos dessa lista sejam impressos na ordem inversa com que estão impressos na ordem inversa com que estão encadeado na lista;encadeado na lista;

Ao examinar a sua implementação, busque no Ao examinar a sua implementação, busque no seu dia-a-dia, algo que se assemelhe à seu dia-a-dia, algo que se assemelhe à dinâmica de inclusão dos elementos na lista.dinâmica de inclusão dos elementos na lista.

171

Page 27: Algoritmos e Estruturas de Dados II IEC013 Revisão: Listas ... · A estrutura de dados de um nó de uma lista duplamente encadeada recebe um novo campo: um ponteiro para o nó antecessor

QuestõesQuestões