Você está na página 1de 19

Estruturas de Dados I:

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

• criar uma estrutura de pilha;


• inserir um elemento no topo
(push);
• remover o elemento do topo
(pop);
• verificar se a pilha está vazia;
• liberar a estrutura de pilha.
TAD Pilha
Implementação
• Há várias opções de estruturas de dados que permitem
uma implementação eficiente para pilha.
▫ A escolha adequada de uma implementação depende
fortemente das operações a serem realizadas sobre o
modelo.

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

void push(Pilha* p, float v){


Lista* novo = (Lista*) malloc(sizeof(Lista));
novo->info = v;
novo->prox = p->prim;
p->prim = novo;
}
POP
float pop(Pilha* p){
Lista* l;
float v;

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

void libera (Pilha* p)


{
Lista* q = p->prim;
while (q!=NULL) {
Lista* t = q->prox;
free(q);
q = t;
}
free(p);
}
Exercício
• Calculadora pós-fixada
▫ Entrada: 3, 5, 8, *, +

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).

Você também pode gostar