algoritmos e estruturas de dados listas encadeadas prof. me. claudio benossi [email protected]

26
Algoritmos e Estruturas de Dados Listas Listas Encadeadas Encadeadas Prof. Me. Claudio Benossi [email protected]

Upload: internet

Post on 18-Apr-2015

109 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Algoritmos e Estruturas de Dados Listas Encadeadas Prof. Me. Claudio Benossi claudio@beno.com.br

Algoritmos e Estruturas de Dados

Listas Listas EncadeadasEncadeadas

Prof. Me. Claudio [email protected]

Page 2: Algoritmos e Estruturas de Dados Listas Encadeadas Prof. Me. Claudio Benossi claudio@beno.com.br

Listas EncadeadasListas EncadeadasListas 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 Listas Encadeadas Prof. Me. Claudio Benossi claudio@beno.com.br

Listas EncadeadasListas EncadeadasListas 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 Listas Encadeadas Prof. Me. Claudio Benossi claudio@beno.com.br

Listas EncadeadasListas EncadeadasListas EncadeadasListas Encadeadas

21. 1.

Comprar Comprar lâmpadalâmpada

32. Trocar 2. Trocar lâmpadalâmpada

43. 3.

Procurar Procurar contaconta

54. Pagar 4. Pagar contaconta

65. 5.

Desligar Desligar micromicro

fim6. Dormir6. Dormir

Page 5: Algoritmos e Estruturas de Dados Listas Encadeadas Prof. Me. Claudio Benossi claudio@beno.com.br

DormirDormirDesligaDesligar micror micro

Pagar Pagar contaconta

ProcuraProcurar contar conta

Trocar Trocar lâmpadlâmpad

aa

Listas EncadeadasListas Encadeadas:: Representação por :: Representação por vetoresvetoresListas 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

ComprComprar ar

lâmpadlâmpadaa

Tarefa:

Índice: 1 2 3 4 5 6

Page 6: Algoritmos e Estruturas de Dados Listas Encadeadas Prof. Me. Claudio Benossi claudio@beno.com.br

Listas EncadeadasListas Encadeadas:: Representação por :: Representação por vetoresvetoresListas 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”??

DormirDormirDesligaDesligar micror micro

Pagar Pagar contacontaLigar Ligar micromicro

ProcuraProcurar contar conta

Trocar Trocar lâmpadlâmpad

aa

ComprComprar ar

lâmpadlâmpadaa

Tarefa:

Índice: 1 2 3 4 5 6 7

Page 7: Algoritmos e Estruturas de Dados Listas Encadeadas Prof. Me. Claudio Benossi claudio@beno.com.br

Listas EncadeadasListas Encadeadas:: Representação por :: Representação por vetoresvetoresListas 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

contíguascontíguas de memória. de memória.

A lista pode ser percorrida em qualquer A lista pode ser percorrida em qualquer direção.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 deslocamento de itens para preencher o espaço deixado vazio.espaço deixado vazio.

Page 8: Algoritmos e Estruturas de Dados Listas Encadeadas Prof. Me. Claudio Benossi claudio@beno.com.br

Listas EncadeadasListas Encadeadas:: Representação por :: Representação por ponteirosponteirosListas 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 Listas Encadeadas Prof. Me. Claudio Benossi claudio@beno.com.br

campos de informação

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

Representação gráfica de um elemento da Representação gráfica de um elemento da lista:lista:

Cada item é encadeado com o seguinte, mediante Cada item é encadeado com o seguinte, mediante uma variável do tipo uma variável do tipo ponteiroponteiro..

Permite utilizar Permite utilizar posições não contíguas posições não contíguas de de memória.memória.

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

próximo nó

Page 10: Algoritmos e Estruturas de Dados Listas Encadeadas Prof. Me. Claudio Benossi claudio@beno.com.br

Listas EncadeadasListas Encadeadas:: Representação por :: Representação por ponteirosponteirosListas 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 Listas Encadeadas Prof. Me. Claudio Benossi claudio@beno.com.br

Operações sobre lista encadeadaOperações sobre lista encadeadaOperaçõ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 Listas Encadeadas Prof. Me. Claudio Benossi claudio@beno.com.br

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

Outras operações possíveis:Outras operações possíveis: CriarCriar uma lista uma lista DestruirDestruir uma lista uma lista OrdenarOrdenar uma lista uma lista IntercalarIntercalar duas listas duas listas ConcatenarConcatenar duas listas duas listas DividirDividir uma lista em duas uma lista em duas CopiarCopiar uma lista em outra uma lista em outra

Page 13: Algoritmos e Estruturas de Dados Listas Encadeadas Prof. Me. Claudio Benossi claudio@beno.com.br

Operações sobre lista encadeadaOperações sobre lista encadeada:: :: InserçãoInserção de itens de itensOperaçõ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 lista No No final final de uma listade uma lista NoNo meio meio de uma listade uma lista

Page 14: Algoritmos e Estruturas de Dados Listas Encadeadas Prof. Me. Claudio Benossi claudio@beno.com.br

p 5 2 /4

Operações sobre lista encadeadaOperações sobre lista encadeada:: :: InserçãoInserção de itens no de itens no inícioinícioOperaçõ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.

3

163

Page 15: Algoritmos e Estruturas de Dados Listas Encadeadas Prof. Me. Claudio Benossi claudio@beno.com.br

Operações sobre lista encadeadaOperações sobre lista encadeada:: :: InserçãoInserção de itens no de itens no finalfinalOperaçõ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 Listas Encadeadas Prof. Me. Claudio Benossi claudio@beno.com.br

Operações sobre lista encadeadaOperações sobre lista encadeada:: :: InserçãoInserção de itens no de itens no meiomeioOperaçõ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 Listas Encadeadas Prof. Me. Claudio Benossi claudio@beno.com.br

p 5 2 /4

Operações sobre lista encadeadaOperações sobre lista encadeada:: :: RemoçãoRemoção de itens no de itens no inícioinícioOperaçõ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 Listas Encadeadas Prof. Me. Claudio Benossi claudio@beno.com.br

Operações sobre lista encadeadaOperações sobre lista encadeada:: :: RemoçãoRemoção de itens no de itens no finalfinalOperaçõ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 Listas Encadeadas Prof. Me. Claudio Benossi claudio@beno.com.br

Operações sobre lista encadeadaOperações sobre lista encadeada:: :: RemoçãoRemoção de itens no de itens no meiomeioOperaçõ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].proxlista[3].prox ← lista[5].prox

Page 20: Algoritmos e Estruturas de Dados Listas Encadeadas Prof. Me. Claudio Benossi claudio@beno.com.br

Um outro exemploUm outro exemploUm outro exemploUm outro exemplo

O programa abaixo...O programa abaixo...

169

Page 21: Algoritmos e Estruturas de Dados Listas Encadeadas Prof. Me. Claudio Benossi claudio@beno.com.br

Outros tipos de Listas EncadeadasOutros tipos de Listas EncadeadasOutros 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 22: Algoritmos e Estruturas de Dados Listas Encadeadas Prof. Me. Claudio Benossi claudio@beno.com.br

Listas Duplamente EncadeadasListas Duplamente EncadeadasListas 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 23: Algoritmos e Estruturas de Dados Listas Encadeadas Prof. Me. Claudio Benossi claudio@beno.com.br

Listas Duplamente EncadeadasListas Duplamente EncadeadasListas Duplamente EncadeadasListas 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 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 24: Algoritmos e Estruturas de Dados Listas Encadeadas Prof. Me. Claudio Benossi claudio@beno.com.br

Listas CircularesListas CircularesListas 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 Listas Encadeadas Prof. Me. Claudio Benossi claudio@beno.com.br

Listas CircularesListas CircularesListas 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 Listas Encadeadas Prof. Me. Claudio Benossi claudio@beno.com.br

QuestõesQuestõesQuestõesQuestões