Documente Academic
Documente Profesional
Documente Cultură
Mdulo 11 Pilhas
9/8/2005
Referncias
Waldemar Celes, Renato Cerqueira, Jos Lucas Rangel, Introduo a Estruturas de Dados, Editora Campus (2004) Captulo 11 Pilhas
9/8/2005
Tpicos
Introduo Interface do tipo pilha Implementao de pilha com vetor Implementao de pilha com lista Exemplo de uso: calculadora ps-fixada
9/8/2005
Introduo
Pilha
novo elemento inserido no topo e acesso apenas ao topo
o primeiro que sai o ltimo que entrou (LIFO last in, first out )
operaes bsicas:
empilhar (push) um novo elemento, inserindo-o no topo desempilhar (pop) um elemento, removendo-o do topo
push (a) push (b) push (c) pop () retorna c push (d) pop () retorna d
topo
b a
topo
c b a
topo
b a
topo
d b a
topo
b a
topo
9/8/2005
9/8/2005
funo pilha_vazia
informa se a pilha est ou no vazia
funo pilha_libera
destri a pilha, liberando toda a memria usada pela estrutura.
9/8/2005 (c) Dept. Informtica - PUC-Rio 6
typedef struct pilha Pilha; Pilha* pilha_cria (void); void pilha_push (Pilha* p, float v); float pilha_pop (Pilha* p); int pilha_vazia (Pilha* p); void pilha_libera (Pilha* p);
9/8/2005
9/8/2005
9/8/2005
*/
9/8/2005
11
9/8/2005
13
9/8/2005
14
9/8/2005
16
Exemplo:
calculadora HP cientfica usa notao ps-fixa
9/8/2005
17
Exemplo:
avaliao da expresso 1 2 4 5 + *
9/8/2005 (c) Dept. Informtica - PUC-Rio 18
1245+* 1245+*
2 1
-1
empilhe os valores 4 e 5
1245+*
5 4 -1
1245+*
-1 9 -1
1245+*
-9
19
*/ */
9/8/2005
21
9/8/2005
22
9/8/2005
23
void calc_operador (Calc* c, char op) { float v1, v2, v; /* desempilha operandos */ if (pilha_vazia(c->p)) v2 = 0.0; else v2 = pilha_pop(c->p); if (pilha_vazia(c->p)) v1 = 0.0; else v1 = pilha_pop(c->p); /* faz operao */ switch (op) { case ' : v = v1+v2; +' break; case ': v = v1-v2; -' break; case ': v = v1*v2; *' break; case ': /' v = v1/v2; break; } /* empilha resultado */ pilha_push(c->p,v); printf(c->f,v); /* imprime topo da pilha */ }
9/8/2005 (c) Dept. Informtica - PUC-Rio 24
9/8/2005
25
Resumo
Pilha
top push pop
push (a)
retorna o topo da pilha insere novo elemento no topo da pilha remove o elemento do topo da pilha
push (b) push (c) pop () retorna c push (d) pop () retorna d
topo
b a
topo
c b a
topo
b a
topo
d b a
topo
b a
topo
9/8/2005
26