A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Listas, Filas e Pilhas Katia Guimarães.

Apresentações semelhantes


Apresentação em tema: "Listas, Filas e Pilhas Katia Guimarães."— Transcrição da apresentação:

1 Listas, Filas e Pilhas Katia Guimarães

2 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 . . . Null

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. ant prox (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 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 Neste caso, as operações envolvidas são casos particulares
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.
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.


Carregar ppt "Listas, Filas e Pilhas Katia Guimarães."

Apresentações semelhantes


Anúncios Google