Transcript
Algoritmos e Estruturas de Dados
Listas Lista Duplamente Encadeada
Listas e Árvores – assunto complementar
Caracterí Características Podem ser percorridas do iní início ao final e vicevice-versa. Ponteiro "anterior" necessá necessário para muitas operaç operações. Em alguns casos podepode-se desejar percorrer uma lista nas duas direç direções indiferentemente. Nestes casos, o gasto de memó memória imposto por um novo campo de ponteiro pode ser justificado pela economia em não reprocessar a lista toda.
Prof. Patrick Pedreira
Listas
Listas Implementação de algumas operações de lista duplamente encadeada com alocação dinâmica As operações seguintes são atômicas, isto é, elas realizam a reserva de espaço (quando necessária) além do 'acerto dos ponteiros'.
Nova versão
tipo Item: Registro iní início Livro: Tp_Registro; Tp_Registro; Ant: Ant: Ap_Cé Ap_Célula; lula; Prox: Prox: Ap_Cé Ap_Célula; lula; fim
Pré-condição para todas elas é que se conheça o ponteiro de um nó ou de um vizinho. Além disso, elas não tratam casos especiais. Assim, elas são operações de suporte para as inserções e eliminações do TAD Lista, quando este é implementado por lista duplamente encadeada. Tais operações não ficariam disponíveis para o 'usuário' da TAD. Apenas o projetista do tipo abstrato de dados as usa no desenvolvimento dos algoritmos genéricos de inserção e eliminação (isto é, aqueles que tratam todos os casos, além das condições de erro).
1
Listas
Listas
Inserção à direita de um nó
tipo Item: Registro iní início Livro: Tp_Registro; Tp_Registro; Ant: Ant: Ap_Cé Ap_Célula; lula; Prox: Prox: Ap_Cé Ap_Célula; lula; fim
Listas
Inserção_dir (ref pont: Ap_Célula; Novo_Livro: Tp_Registro):neutro var Novo_Item:Ap_Célula; início aloque(Novo_Item); Novo_Item->Livro.isbn Novo_Livro.isbn; Novo_Item->Livro.Autor Novo_Livro.Autor; Novo_Item->Livro.Titulo Novo_Livro.Titulo; Novo_Item->Prox pont->Prox; Novo_Item->Prox->Ant Novo_Item; Novo_Item->Ant pont; pont->Prox Novo_Item; fim
Listas
Inserção à esquerda de um nó
tipo Item: Registro iní início Livro: Tp_Registro; Tp_Registro; Ant: Ant: Ap_Cé Ap_Célula; lula; Prox: Prox: Ap_Cé Ap_Célula; lula; fim
Inserção_esq (ref pont: Ap_Célula; Novo_Livro: Tp_Registro):neutro var Novo_Item:Ap_Célula; início aloque(Novo_Item); Novo_Item->Livro.isbn Novo_Livro.isbn; Novo_Item->Livro.Autor Novo_Livro.Autor; Novo_Item->Livro.Titulo Novo_Livro.Titulo; Novo_Item->Prox pont; Novo_Item->Ant pont->Ant; Novo_Item->Ant->Prox Novo_Item; pont->Ant Novo_Item; fim
2
Listas
Listas
Eliminação à direita de um nó
tipo Item: Registro iní início Livro: Tp_Registro; Tp_Registro; Ant: Ant: Ap_Cé Ap_Célula; lula; Prox: Prox: Ap_Cé Ap_Célula; lula; fim
Listas
Remoção_dir (ref pont: Ap_Célula;):neutro var ApRemove:Ap_Célula; início ApRemove pont->Prox; pont->Prox ApRemove->Prox; ApRemove->Prox->Ant pont; libere(ApRemove); fim
Listas
Eliminação do próprio nó
tipo Item: Registro iní início Livro: Tp_Registro; Tp_Registro; Ant: Ant: Ap_Cé Ap_Célula; lula; Prox: Prox: Ap_Cé Ap_Célula; lula; fim
Remoção(ref pont: Ap_Célula;):neutro início pont->Prox->Ant pont->Ant; pont->Ant->Prox pont->Prox; libere(pont); fim
3
Lista
Árvores
Lista Circular
Percurso em árvores biná binárias
Uma lista circular possui o mesmo tipo de nodo que uma lista com encadeamento simples Referência para um elemento
Percorrer uma árvore visitando cada nó nó uma única vez gera uma sequência linear de nó nós, e então passa a ter sentido falar em sucessor e predecessor de um nó segundo um determinado percurso. Há Há três maneiras recursivas de se percorrer árvores biná binárias. Percurso em Pré-Ordem
Link para o pró próximo
També Também possui link para o anterior, no caso de ser duplamente encadeada
Percurso em In-Ordem Percurso em Pós-Ordem
Diferenç Diferença para as listas vistas anteriormente Não possui “primeiro” primeiro” e “último “último”” O link do último nodo ao invé invés de ser null, aponta para o primeiro nodo
Árvores
Árvores
Percurso em Pré-Ordem (Raiz, Esquerda, Direita)
Percurso em In-Ordem (Esquerda, Raiz, Direita)
1. se árvore vazia; fim
1. se árvore vazia, fim
2. visitar o nó raiz (imprimí-lo, por exemplo)
2. percorrer em in-ordem a subárvore esquerda
3. percorrer em pré-ordem a subárvore esquerda
3. visitar o nó raiz
4. percorrer em pré-ordem a subárvore direita
4. percorrer em in-ordem a subárvore direita
Sequência do Percurso: ABDCEGFHI
Sequência do Percurso: DBAEGCHFI
4
Árvores
Árvores
Percurso em Pós-Ordem (Esquerda, Direita, Raiz) 1. se árvore vazia, fim 2. percorrer em Pós-Ordem a subárvore esquerda
Término de uma árvore Desaloca todo o espaç espaço de memó memória da árvore e retorna a árvore ao estado equivalente ao inicial, isto é, nula.
3. percorrer em Pós-Ordem a subárvore direita 4. visitar o nó raiz
Sequência do Percurso: DBGEHIFCA
5