Preview only show first 10 pages with watermark. For full document please download

Aed 10

Aula de Algoritmo e Estrutura de Dados do Professor Patrick Pedreira.

   EMBED


Share

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