1 / 13

Aula 3

Aula 3. Listas, pilhas, filas. Operações com listas. Questão importante: final da lista. Como implementar ?. NIL - endereço especial . 2. Sentinela – registro contendo uma chave especial. Início da lista : identificado por um ponteiro head. Tipos de Lista.

gin
Download Presentation

Aula 3

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. Aula 3 Listas, pilhas, filas

  2. Operações com listas Questão importante: final da lista. Como implementar ? • NIL - endereço especial . • 2.Sentinela – registro contendo uma chave especial. Início da lista : identificado por um ponteiro head

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

  4. Operações 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 elemento k. Início 1. x := head(L) 2. enquanto x # nil e chave(x) # k 3. faça x := prox(x) 4. devolva x Fim

  5. Custo: o procedimento Busca gasta θ(n), visto que no Pior caso podemos percorrer toda a lista. Lista-Inserção (L,x) – dado um elemento x, o procedimento Inserção po- siciona x no início da lista. 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

  6. Custo: o tempo de execução para Inserção de uma lista com n elementos é O(1). Lista-Remoção (L,x) – o procedimento Remoção retira um elemento x de uma lista duplamente encadeada. Lista-Remoção (L,x) Entrada: lista L , elto x para remoção. Saída: lista (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

  7. Custo: o procedimento Remoção executa em tempo Θ(n) para uma lista de n eltos, isto devido ao uso de Busca. Pilhas e Filas 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 – aqui a alocação sequencial é favorável porque in- • serções e remoções não acarretam movimentação de nós. • eltos a serem inseridos ou removidos estão em posições • especiais. • Do que vc precisa ? • Pilha - uma variável que mantenha o topo da lista (top). • 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, Leiserson 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 elto. 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

  12. Remoção(F) – retirar o elto 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 head(F) := prox(x) • prox(x) := nil • desaloque(x) • Fim Obs: operação de consulta para pilhas e filas são imediatas Através do ponteiro head .

  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