Escolar Documentos
Profissional Documentos
Cultura Documentos
Pilhas
Talles Brito Viana
Pilha
• Ideia fundamental: todo acesso a uma pilha deve
ser feito do topo.
▫ Se quisermos adicionar pratos na pilha, o colocamos
no topo.
▫ Se quisermos retirar pratos da pilha, retiramos o do
topo.
• Logo, os elementos da pilha só podem ser
retirados na ordem inversa à ordem em que
foram introduzidos.
▫ LIFO – last in, first out. O primeiro que sai é o último
que entrou.
Operações Básicas
• Colocar na pilha = PUSH
• Remover da pilha = POP
TAD Pilha
Lista Vetor
Pilha
Pilha com Vetor
• A estrutura da pilha tem um limite conhecido.
Inicializa
PUSH
POP
( )
Libera
Pilha com Lista
• O número máximo de elementos que serão
armazenados na pilha não é conhecido.
struct pilha {
Lista* prim;
};
Inicializa
PUSH
if(vazia(p)){
printf(“Pilha Vazia”);
exit(1); /* aborta programa*/
}
l = p->prim;
v = l->info;
p->prim = l->prox;
free(l)
return v;
}
Libera
8
5
3
* 40
3 + 43
Exercício: Calculadora Pós-Fixada
• Implemente uma pilha de float (%f).
• Pergunte se o usuário deseja entrar com um
operador, operando ou deseja sair.
▫ Leia um caractere para determinar cada caso (tipo
char, %c).
‘o’: operando.
‘r’: operador.
‘s’: sair e mostrar resultado.
Exercício
• Para cada caso:
▫ Se for operando: leia o operando (float) e coloque
na pilha.
▫ Se for operador: leia o operador, retire da pilha
dois operandos, execute a operação e coloque o
resultado na pilha.
▫ Se o usuário deseja sair: mostre o resultado final
(imprimir topo da pilha).