130 likes | 304 Views
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.
E N D
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 • 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.
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
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
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
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
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
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
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
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
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 .
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.