1 / 13

Listas, Filas e Pilhas

Listas, Filas e Pilhas. Katia Guimarães. Null. Operações com listas. O início da lista é identificado por um ponteiro especial (variável tipo endereço) chamado Head . O final da lista pode ser implementado com: 1. NULL/NIL - Endereço especial .

nani
Télécharger la présentation

Listas, Filas e Pilhas

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Listas, Filas e Pilhas Katia Guimarães

  2. Null Operações com listas O início da lista é identificado por um ponteiro especial (variável tipo endereço) chamado Head. O final da lista pode ser implementado com: 1. NULL/NIL - Endereço especial . 2.Sentinela – Registro contendo uma chave especial. (Requer o uso de apontador para o último elemento) Head . . .

  3. Tipos de Lista • Lista duplamente encadeada • Cada elemento é um objeto com um campo chave • e dois ponteiros: ant e prox . • Lista simplesmente encadeada • Omitimos em cada elemento o ponteiro ant . • Lista circular • O ponteiro ant do primeiro elto. da lista aponta para o • último elto., e o ponteiro prox do último elto. aponta • para o primeiro elemento. prox ant (Dados)

  4. Operações em Lista - Busca Lista-Busca(L,k) – Encontra o primeiro elemento com chave k na lista L por uma busca linear simples, retornando um ponteiro para este elemento. Lista-Busca (L,k) Entrada: Lista de elementos L, elto k para a busca. Saída: Ponteiro para o registro que contém o elemento k. Início 1. x := header(L) 2. enquanto x  nil e chave(x)  k 3. faça x := prox(x) 4. devolva x Fim Custo: T(n) = θ(n) (No pior caso pode percorrer toda a lista).

  5. Operações em Lista - Inserção Lista-Inserção (L,x) – Dado um elemento x, o procedimento inclui um registro no início da lista com o elemento x. Lista-Inserção(L,x) Entrada: lista de elementos L. Saída: lista de elementos (L + x). Início 1. prox(x) := head(L) 2. se head(L) # nil 3. então ant(head(L)) := x 4. head(L) := x 5. ant(x) := nil Fim Custo: O tempo de execução para Inserção de uma lista com n elementos é O(1).

  6. Operações em Lista - Remoção Lista-Remoção (L,x) – O procedimento Remoção retira um elemento x de uma lista duplamente encadeada. Lista-Remoção (L,x) Início 1. x := Lista-Busca (L,x) 2. se ant(x)  nil 3. então prox(ant(x)) := prox(x) 4. senão head(L) := prox(x) 5. se prox(x)  nil 6. então ant(prox(x)) := ant(x) Fim Custo: O procedimento Remoção executa em tempo Θ(n) Para uma lista com n elementos, isto devido ao uso de Busca.

  7. Disciplinas de Pilha e Fila Pilha - implementa a política LIFO (last-in, first-out) Inserção : início da lista Remoção: início da lista Fila - implementa a política FIFO (first-in,first-out) inserção : final da lista remoção : início da lista

  8. Opções de implementação • Arrays – A alocação seqüencial é favorável porque in- • serções e remoções não acarretam movimentação de nós. • Os elementos a serem inseridos ou removidos estão • em posições especiais. • Do que você precisa ? • Pilha - Uma variável que mantenha o topo da lista (topo). • Fila - Duas variáveis que mantenham o início (head) e o • final da lista (tail). • Dica: Leia o tópico no livros dos autores Cormen et al.

  9. Listas encadeadas • Neste caso, as operações envolvidas são casos particulares • daquelas apresentadas anteriormente. • Pilhas • Empilhamento – coloca um elto x previamente definido • (alocação realizada,campos preenchidos) na pilha. • Pilha-Inserção (P,x) • Entrada: pilha P , elemento a ser inserido x. • Saída: pilha (P + x) • Início • 1. Lista-Inserção (P,x) • Fim

  10. Desempilhamento – remove o elto x do topo da pilha P. Pilha-Remoção (P) Entrada: pilha P com elto x no topo. Saída: pilha (P – x) Início 1. Se head(P) = nil 2. então {pilha vazia} 3.senão head(P) := prox(x) prox(x) := nil desaloque x Fim

  11. Filas Inserção (F,x) – insere o elto x previamente definido na fila F. Obs: Tail é um ponteiro para o último elemento. Inserção (F,x) Entrada: uma fila F, elto x para inserir Saída: fila (F + x) Início 1. prox(x) := nil 2. prox(tail(F)) := x 3. tail(F) := x Fim Qual o tempo de execução da operação de inserção?

  12. Filas Remoção(F) – retirar o elemento x do início da fila F. • Remoção (F) • Entrada: uma fila F • Saída: uma fila (F – x) • Início • se head(F) = nil • então {fila vazia} • senão apont_x = head(F) • head(F) := prox(apont_x) • x := elem(apont_x) • desaloque(apont_x) • devolva(x) • Fim Obs: Operação de consulta para pilhas e filas são imediatas.

  13. Exercícios • Faça os algoritmos para as operações sobre listas simples- • mente encadeadas e circulares. • Faça os algoritmos para as operações de pilhas e filas em • arrays.

More Related