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

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

Estrutura de dados Pilhas e filas

Apresentações semelhantes


Apresentação em tema: "Estrutura de dados Pilhas e filas"— Transcrição da apresentação:

1 Estrutura de dados Pilhas e filas
Professor Luiz Jose Hoffmann Filho

2 Pilhas Uma pilha é uma coleção de objetos que são inseridos e retirados de acordo com o princípio que o último que entra é o primeiro que sai (LIFO) Pode-se inserir um objeto a qualquer momento, mas somente o objeto inserido recentemente pode ser removido a qualquer momento

3 Pergunta: Onde pilhas são usadas?
Em computação, que situações vocês lembram de verem pilhas sendo usadas?

4 Tipo Abstrato de Dados: Pilha
As mais simples de todas as estruturas de dados Formalmente, um pilha S é um tipo abstrato de dados (TAD) que suporta os métodos Push(e): insere o objeto e no topo da pilha Pop(): retira o objeto do topo da pilha e o retorna; ocorre um erro se a pilha estiver vazia Size(): retorna o número de elementos na pilha IsEmpty(): retorna um booleano indicando se a pilha está vazia Top(): retorna o elemento no topo da pilha, sem retira-lo; ocorre um erro se a pilha estiver vazia

5 Exemplo: Uma pilha P A pilha P possui 4 elementos
O elemento do tipo (P[4]) é 9 6 5 4 9 3 2 2 6 1 15

6 Inserção na pilha P P A inserção em uma pilha é feita através de uma operação de chamada PUSH P = (15, 6, 2, 9) Top[P] = 4 Vamos ver como fica a pilha após duas operações de inserção: PUSH(P, 17) PUSH(P, 3) 6 5 4 9 3 2 2 6 1 15

7 Inserção na pilha PUSH(P, 17)
Top[P] = 5 6 5 17 4 9 3 2 2 6 1 15

8 Inserção na pilha PUSH(P, 3)
Top[P] = 6 6 3 5 17 4 9 3 2 2 6 1 15

9 Removendo da pilha POP(P)
Top[P] = 5 6 5 17 4 9 3 2 2 6 1 15

10 Pré-condições para as operações
PUSH: A pilha deve possuir espaços disponíveis para a inserção de um novo item POP A pilha não pode estar vazia

11 Implementação baseada em vetor
Um vetor S de N elementos mais uma variável inteira T que fornece o índice do elemento no topo do vetor S. Índices em C começam com 0, T = -1 (pilha vazia) Quantidade de elementos :: T + 1 Int Size() { Return t +1; } Int pop() { if isEmpty() { return 0; } else { t = t -1; return S[t -1];

12 Implementação baseada em vetor
O vetor que armazena os elementos da pilha pode ficar cheio A operação de push vai lançar uma nova exceção – limitação da implementação baseada em vetor Int push(int valor) { if (t ==(tamanho-1)) { return 0; } else { t = t +1; S[t] = valor; }

13 Problema Implementação baseada em vetor é simples e eficiente
Qual o aspecto negativo? Qual seria uma solução aceitável?

14 Implementando uma pilha com LSEs
Primeiro Passo: onde será o topo da pilha, na cabeça ou na cauda Inserir e remover elementos constantemente apenas na cabeça Variável de instância para o número corrente de elementos (size)

15 Filas

16 Filas Coleçãp de objetos que são inseridos e removidos de acordo com o princípio de que o primeiro que entra é o primeiro que sai (FIFO) Pode-se inserir os elementos em qualquer momento, mas somente o elemento que está na fila a mais tempo pode ser retirado em um dado momento

17 Tipo abstrato de dados: Fila
Remoção no início, inserção no fim Principais operações Enqueue(o): insere o lemento o no fim da fila Dequeue(): retira e retorna o objeto da frente da fila; ocorre um erro se a fila estiver vazia Size(): retorna o número de objetos na fila isEmpty(): retorna um booleano indicando se a fila estáo vazia front(): retorna, mas não remove, o objeto na frente da fila; ocorre um erro se a fila estiver vazia

18 Fila - Exemplo 1 2 3 4 5 6 7 8 9 10 F A fila F possui 5 elementos
15 6 9 4 F Inicio[F]= 6 Fim[F] = 10 A fila F possui 5 elementos O elemento do início (F[7]) é o 15 As primeira operações de exemplo são: ENQUEUE(F, 17) ENQUEUE(F, 3) ENQUEUE(F, 5) ENQUEUE()

19 Fila – Exemplo:ENQUEUE(F, 17)
2 3 4 5 6 7 8 9 10 15 6 9 4 17 F Fim[F] = 1 Inicio[F]= 6

20 Fila – Exemplo:ENQUEUE(F, 3)
1 2 3 4 5 6 7 8 9 10 3 15 6 9 4 17 F Fim[F] = 2 Inicio[F]= 6

21 Fila – Exemplo:DEQUEUE()
1 2 3 4 5 6 7 8 9 10 3 6 9 4 17 F Fim[F] = 2 Inicio[F]= 7

22 Usando o módulo operador
A operação enqueue lança uma exceção se o vetor está cheio Exceção dependente de implementação Int enqueue(o) { if (size()= N-1) { return -1; } else { Q[r] = o; r = (r +1 ) mod N }

23 Usando o módulo operador
A operação dequeue lança uma exceção se a fila está vazia Exceção especificada no TAD Int dequeue() { if idEmpty() { return –1; } else { o = Q[f]; f = (f +1) % N; return o; }

24 Exercício de Pilha Ilustre o resultado de cada operação na sequência: PUSH(P, 4), PUSH(P, 3), POP(P), PUSH(P, 8) e POP(P) sobre a pilha P inicialmente vazia armazenada em um vetor P [1… 6] Para a mesma pilha vazia, ilustre as seguintes sequências: PUSH(P, 3), POP(P), POP(P), PUSH(P, 4) PUSH(P, 1), POP(P), PUSH(P, 1), PUSH(P, 1), PUSH(P, 1), PUSH(P, 1), PUSH(P, 1), PUSH(P, 1)

25 Exercício de pilha Implemente uma pilha em C e rodem as seguintes condigurações de pilhas: Ilustre o resultado de cada operação na sequência: PUSH(P, 4), PUSH(P, 3), POP(P), PUSH(P, 8) e POP(P) sobre um pilha P inicialmente vazia armazenada em uma lista encadeada Para a mesma pilha vazia, ilusre as seguintes sequências: PUSH(P, 3), POP(P), POP(P), PUSH(P, 4) PUSH(P, 1), POP(P), PUSH(P, 1), PUSH(P, 1), PUSH(P, 1), PUSH(P, 1), PUSH(P, 1), PUSH(P, 1)

26 Exercício de Pilha Especifique e implemente operações para:
Retornar o número de elementos na pilha Retornar o elemento no topo da pilha, sem removê-lo (deve retornar um erro caso a pilha esteja vazia) Seja a função esvazie() tal que, recebendo uma pilha como entrada, esvazie a pilha e descartando todos os seus elementos. Escreva a função esvazie();

27 Exercícios Escreva um programa que verifique que expressões aritméticas estão com os parêmeteses colocados de forma correta. Guarde o resultado numa pilha também. Seu programa deve checar expressões para ver se cada “abre parênteses” tem um “fecha parênteses” correspondente.

28 Exercícios de Filas Descreva a saída da seguinte sequência de operações sobre uma fila : ENQUEUE(5), ENQUEUE(3), DEQUEUE(), ENQUEUE(2), ENQUEUE(8), DEQUEUE(), DEQUEUE(), ENQUEUE(9), ENQUEUE(1), DEQUEUE(), ENQUEUE(7), ENQUEUE(6), DEQUEUE(), DEQUEUE(), ENQUEUE(4), DEQUEUE(), DEQUEUE()

29 Exercícios de Filas Implemente uma fila em C e rodem as seguintes configurações: Ilustre o resultado de cada operação na sequência do exercício anterior Modifique os algoritmos de forma que eles dectem problemas de estouro de fila (fila sem espaço para serem inseridos novos elementos) e problemas de tentativas de remoção em filas vazias;

30 Exercícios de Filas Modifique os algoritmos de fila de forma que os elementos sejam movimentados para a frente de fila quando o elemento do início for removido (a fila “anda” quando um elemento é desenfileirado)


Carregar ppt "Estrutura de dados Pilhas e filas"

Apresentações semelhantes


Anúncios Google