150 likes | 301 Views
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 .
E N D
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 . 2.Sentinela – Registro contendo uma chave especial. (Requer o uso de apontador para o último elemento) Head . . .
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)
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).
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).
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.
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
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.
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 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?
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.
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.