algoritmos e estruturas de dados listas encadeadas prof. me. claudio benossi [email protected]
TRANSCRIPT
Algoritmos e Estruturas de Dados
Listas Listas EncadeadasEncadeadas
Prof. Me. Claudio [email protected]
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
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
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
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
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
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.
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
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ó
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
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).
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
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
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
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
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
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
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
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
Um outro exemploUm outro exemploUm outro exemploUm outro exemplo
O programa abaixo...O programa abaixo...
169
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
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.
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
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
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
QuestõesQuestõesQuestõesQuestões