/*
Pilha utilizando alocacao estatica (vetores)
Operacoes:
push( ): insere um elemento na pilha.
pop( ): retorna e remove o ultimo elemento inserido na pilha.
Operacoes auxiliares:
topo(): retorna o ultimo elemento inserido na pilha sem remove-lo.
size(): retorna o numero de elementos armazenados
pilha_vazia(): retorna a indicacao se existe ou nao elementos na pilha.
*/
#include <stdio.h>
#define MAX 10
typedef struct typePilha {
int topo;
int vet[MAX];
} typePilha;
void inicia (typePilha *p)
{
p->topo = -1;
}
int cheia (typePilha *p)
{
return (p->topo==MAX-1);
}
int vazia(typePilha *p)
{
return (p->topo==-1);
}
int push (typePilha *p, int val)
{
if (cheia(p))
return 0; // pilha cheia
p->vet[++p->topo]=val;
return 1;
}
int pop (typePilha *p, int *val)
{
if (vazia(p))
return 0; // pilha vazia
*val=p->vet[p->topo--];
return 1;
}
int main(){
int i, dado;
typePilha pilha;
inicia(&pilha);
for(i = 0; i<=3; i++ ) push(&pilha, i);
printf("Topo-> ");
while (!vazia(&pilha)) {
pop(&pilha, &dado);
printf("%d -> ",dado);
}
printf("Inicio da pilha");
fprintf(stdout,"\n\n");fflush(stdout);
return 0;
}