Representação de Pilhas com
a Estrutura Lista e Operações.
Departamento de Engenharia de Computação
Algoritmos e Estruturas de Dados
07/12/2016
1
AGENDA
Introdução
Operações
Implementação com lista encadeada
07/12/2016
2
INTRODUÇÃO
É uma lista linear.
É uma lista LIFO – last in / first out – último que entra
primeiro que sai.
É uma lista dinâmica: pode aumentar ou diminuir durante a
sua existência.
Operações de inserção e remoção são realizadas na mesma
extremidade.
07/12/2016
3
TOPO
BASE
Exemplos
Pilha de pratos
Porta-guardanapos de papel
Controle de sequencias de chamadas de rotinas
Sintaxe de expressões aritméticas
Etc.
07/12/2016
4
Operações
 Top: retorna o elemento que
está no topo da pilha. Não altera
o estado da Pilha.
 Push: insere um novo elemento
no topo da pilha. Altera o estado
da Pilha.
 Pop: remove um elemento do
topo da pilha. Altera o estado da
Pilha.07/12/2016
5
Xn
...
X6
X5
X4
X3
X2
X1
PUSH (P, x) POP (P, x)
PILHA (P)
Topo
Base
Operações
 Init: inicializa a pilha no estado vazia
(NIL ou NULL). Define um estado
inicial.
 IsEmpty: verifica se a pilha está
vazia. Do tipo booleano: retorna
TRUE somente se estiver vazia.
 IsFull: verifica se a pilha está cheia.
Do tipo booleano: retorna TRUE
somente quando não há mais
espaço de armazenamento07/12/2016
6
Xn
...
X6
X5
X4
X3
X2
X1
PUSH (P, x) POP (P, x)
PILHA (P)
Topo
Base
Operações
07/12/2016
7
1
PUSH (P, 1)
PILHA (P)
Topo
20
1
Topo
PUSH (P, 20)
500
20
1
Topo
PUSH (P, 500)
156
500
20
1
Topo
PUSH (P, 156)
349
156
500
20
1
Topo
PUSH (P, 349)
Operações
07/12/2016
8
349
156
500
20
1
POP (P, 349)
PILHA (P)
Topo
156
500
20
1
Topo
POP (P, 156)
500
20
1
Topo
POP (P, 500)
20
1
Topo
POP (P, 20)
1
Topo
POP (P, 1)
Operações9
20
55
20
PUS
H
100
55
20
100
55
20
55
20
60
55
20
60
55
20
55
20
55
20 20 20
PO
P
PUS
H
PUS
H
PO
P
PUS
H
PO
P
PO
P
Implementações
Pilha Estática
Pilha Dinâmica
07/12/2016
10
Implementação: Definição da Pilha
type
tipo_dado = integer;
tipo_pilha = ^tipo_no;
tipo_no = record
dado: tipo_dado;
prox: tipo_pilha;
end;
07/12/2016
11
Implementação: Criação da Pilha
Procedure Cria_Pilha(var p:tipo_pilha);
begin
p := Nil;
writeln('Lista Criada com Sucesso!');
end;
07/12/2016
12
Implementação: IsEmpty
Function Vazia(p: tipo_pilha): boolean;
begin
Vazia := (p=Nil);
end;
07/12/2016
13
Implementação: PUSH
procedure Empilha(var p: tipo_pilha; x: tipo_dado);
var
aux : tipo_pilha;
Begin
new(aux);
aux^.dado := x;
aux^.prox := p;
p := aux;
end;07/12/2016
14
Implementação: POP
function Desempilha(var p: tipo_pilha; var x : tipo_dado):boolean;
var
aux:tipo_pilha;
begin
if Vazia(p) Then
Desempilha := false
else
begin
Desempilha := True;
x := p^.dado;
aux := p;
p := p^.prox;
dispose(aux);
end;
end;
07/12/2016
15
Implementação: TOPO
Function Topo(p: tipo_pilha): integer;
Begin
Topo := p^.dado;
end;
07/12/2016
16
Implementação: Impressão da Pilha
procedure imprimir();
begin
if Vazia(p) Then
writeln('Pilha Vazia')
else
begin
writeln(' IMPRIMINDO TODO O CONTEÚDO DA PILHA ');
aux:=p;
while(aux <> nil)do //imprimindo lista
begin
write(' dado : ');
writeln(aux^.dado);
aux := aux^.prox;
end; //while
end; //if
end;
07/12/2016
17
Atividade em Sala de Aula
07/12/2016
18
Referências
1. Deitel, H. M.; Deitel, P. J. Java: Como Programar. Tradução: Edson
Furmankiewicz; Revisão Técnica: Fábio Luis Picelli Lucchini. 6.ª Edição. São Paulo:
Pearson Prentice Hall, 2005. Cap. 17, p. 607 – 644.
2. Deitel, H. M.; Deitel, P. J. C: Como Programar. Tradução: Daniel Vieira; Revisão
Técnica: César Caetano. 6.ª Edição. São Paulo: Pearson Prentice Hall, 2011. Cap. 12,
p. 379 – 413.
3. Deitel, H. M.; Deitel, P. J. C++: Como Programar. Tradução: Edson
Furmankiewicz; Revisão Técnica: Fábio Luis Picelli Lucchini. 5.ª Edição. São Paulo:
Pearson Prentice Hall, 2006. Cap. 21, p. 789 – 845.
4. Schildt, H.; Skrien, D. Programação com Java: Uma Introdução Abrangente.
Tradução: Aldir José Coelho Cêrrea da Silva. Revisão Técnica: Maria Lúcia Blanck
Lisbôa. Porto Alegre: AMGH, 2013. Cap. 25, p. 911 – 966
07/12/2016
19
Referências
5. Ziviani, N. Projeto de Algoritmos com Implementações em Pascal e C.
3.ª ed. rev. e amp. São Paulo: Cengage Learning, 2015. Cap. 3, p. 69 – 100.
6. Forouzan, B., Mosharraf, F. Fundamentos da Ciência da Computação.
Tradução: Solange Aparecida Visconti. Revisão Técnica: Ronaldo A. L.
Gonçalves. São Paulo: Cengage Learning, 2011. Cap. 11, p. 257 – 278.
7. Pereira, S. L. Estruturas de Dados Fundamentais: Conceitos e
Aplicações. São Paulo: Érica, 1996.
8. Ascencio, A. F. G.; Araújo, G. S. Estruturas de Dados: Algoritmos,
Análise da Complexidade e Implementações em Java e C/C++. São Paulo:
Pearson Prentice Hall, 2010. Cap. 4, p.183 – 200.
07/12/2016
20

Pilhas

  • 1.
    Representação de Pilhascom a Estrutura Lista e Operações. Departamento de Engenharia de Computação Algoritmos e Estruturas de Dados 07/12/2016 1
  • 2.
  • 3.
    INTRODUÇÃO É uma listalinear. É uma lista LIFO – last in / first out – último que entra primeiro que sai. É uma lista dinâmica: pode aumentar ou diminuir durante a sua existência. Operações de inserção e remoção são realizadas na mesma extremidade. 07/12/2016 3 TOPO BASE
  • 4.
    Exemplos Pilha de pratos Porta-guardanaposde papel Controle de sequencias de chamadas de rotinas Sintaxe de expressões aritméticas Etc. 07/12/2016 4
  • 5.
    Operações  Top: retornao elemento que está no topo da pilha. Não altera o estado da Pilha.  Push: insere um novo elemento no topo da pilha. Altera o estado da Pilha.  Pop: remove um elemento do topo da pilha. Altera o estado da Pilha.07/12/2016 5 Xn ... X6 X5 X4 X3 X2 X1 PUSH (P, x) POP (P, x) PILHA (P) Topo Base
  • 6.
    Operações  Init: inicializaa pilha no estado vazia (NIL ou NULL). Define um estado inicial.  IsEmpty: verifica se a pilha está vazia. Do tipo booleano: retorna TRUE somente se estiver vazia.  IsFull: verifica se a pilha está cheia. Do tipo booleano: retorna TRUE somente quando não há mais espaço de armazenamento07/12/2016 6 Xn ... X6 X5 X4 X3 X2 X1 PUSH (P, x) POP (P, x) PILHA (P) Topo Base
  • 7.
    Operações 07/12/2016 7 1 PUSH (P, 1) PILHA(P) Topo 20 1 Topo PUSH (P, 20) 500 20 1 Topo PUSH (P, 500) 156 500 20 1 Topo PUSH (P, 156) 349 156 500 20 1 Topo PUSH (P, 349)
  • 8.
    Operações 07/12/2016 8 349 156 500 20 1 POP (P, 349) PILHA(P) Topo 156 500 20 1 Topo POP (P, 156) 500 20 1 Topo POP (P, 500) 20 1 Topo POP (P, 20) 1 Topo POP (P, 1)
  • 9.
  • 10.
  • 11.
    Implementação: Definição daPilha type tipo_dado = integer; tipo_pilha = ^tipo_no; tipo_no = record dado: tipo_dado; prox: tipo_pilha; end; 07/12/2016 11
  • 12.
    Implementação: Criação daPilha Procedure Cria_Pilha(var p:tipo_pilha); begin p := Nil; writeln('Lista Criada com Sucesso!'); end; 07/12/2016 12
  • 13.
    Implementação: IsEmpty Function Vazia(p:tipo_pilha): boolean; begin Vazia := (p=Nil); end; 07/12/2016 13
  • 14.
    Implementação: PUSH procedure Empilha(varp: tipo_pilha; x: tipo_dado); var aux : tipo_pilha; Begin new(aux); aux^.dado := x; aux^.prox := p; p := aux; end;07/12/2016 14
  • 15.
    Implementação: POP function Desempilha(varp: tipo_pilha; var x : tipo_dado):boolean; var aux:tipo_pilha; begin if Vazia(p) Then Desempilha := false else begin Desempilha := True; x := p^.dado; aux := p; p := p^.prox; dispose(aux); end; end; 07/12/2016 15
  • 16.
    Implementação: TOPO Function Topo(p:tipo_pilha): integer; Begin Topo := p^.dado; end; 07/12/2016 16
  • 17.
    Implementação: Impressão daPilha procedure imprimir(); begin if Vazia(p) Then writeln('Pilha Vazia') else begin writeln(' IMPRIMINDO TODO O CONTEÚDO DA PILHA '); aux:=p; while(aux <> nil)do //imprimindo lista begin write(' dado : '); writeln(aux^.dado); aux := aux^.prox; end; //while end; //if end; 07/12/2016 17
  • 18.
    Atividade em Salade Aula 07/12/2016 18
  • 19.
    Referências 1. Deitel, H.M.; Deitel, P. J. Java: Como Programar. Tradução: Edson Furmankiewicz; Revisão Técnica: Fábio Luis Picelli Lucchini. 6.ª Edição. São Paulo: Pearson Prentice Hall, 2005. Cap. 17, p. 607 – 644. 2. Deitel, H. M.; Deitel, P. J. C: Como Programar. Tradução: Daniel Vieira; Revisão Técnica: César Caetano. 6.ª Edição. São Paulo: Pearson Prentice Hall, 2011. Cap. 12, p. 379 – 413. 3. Deitel, H. M.; Deitel, P. J. C++: Como Programar. Tradução: Edson Furmankiewicz; Revisão Técnica: Fábio Luis Picelli Lucchini. 5.ª Edição. São Paulo: Pearson Prentice Hall, 2006. Cap. 21, p. 789 – 845. 4. Schildt, H.; Skrien, D. Programação com Java: Uma Introdução Abrangente. Tradução: Aldir José Coelho Cêrrea da Silva. Revisão Técnica: Maria Lúcia Blanck Lisbôa. Porto Alegre: AMGH, 2013. Cap. 25, p. 911 – 966 07/12/2016 19
  • 20.
    Referências 5. Ziviani, N.Projeto de Algoritmos com Implementações em Pascal e C. 3.ª ed. rev. e amp. São Paulo: Cengage Learning, 2015. Cap. 3, p. 69 – 100. 6. Forouzan, B., Mosharraf, F. Fundamentos da Ciência da Computação. Tradução: Solange Aparecida Visconti. Revisão Técnica: Ronaldo A. L. Gonçalves. São Paulo: Cengage Learning, 2011. Cap. 11, p. 257 – 278. 7. Pereira, S. L. Estruturas de Dados Fundamentais: Conceitos e Aplicações. São Paulo: Érica, 1996. 8. Ascencio, A. F. G.; Araújo, G. S. Estruturas de Dados: Algoritmos, Análise da Complexidade e Implementações em Java e C/C++. São Paulo: Pearson Prentice Hall, 2010. Cap. 4, p.183 – 200. 07/12/2016 20