/*
Pilha para inteiros/char em C
by William Antônio Siqueira
Informática com Ênfase em Banco de Dados
FATEC SJC 2009
Long Live To C Language
*/
#ifndef ___STDIO_H_
#include <stdio.h>
#endif
#ifndef _PILHA
#define _PILHA pilha
#endif
//Constante que indica o fim da Pilha (Stack UnderFlow)
#ifndef FIM
#define FIM -1
#endif
typedef struct _pilha{
int *dados, tamanho, pos;
}pilha;
/*
Recebe um ponteiro para pilha, inicializa as variáveis e aloca memória
Retorna NULL caso haja erro na alocação
*/
int novaPilha(pilha *pPilha, int tamanho){
pPilha->pos = 0;
pPilha->tamanho = tamanho;
return (pPilha->dados = malloc(tamanho * sizeof(int)));
}
/*
Remove um elementos da Pilha
*/
int pop(pilha *pPilha){
if(!pPilha->pos)
return FIM;
else
return pPilha->dados[--pPilha->pos];
}
/*
Empurra um elemento da Pilha
*/
void push(pilha *pPilha, int elemento){
if(pPilha->pos == pPilha->tamanho)
else
pPilha->dados[pPilha->pos++] = elemento;
}
/*
Esvazia todos os elementos da Pilha, imprimindo o resultado
*/
void esvaziaPilha(pilha *pPilha){
int x;
while(x
= pop
(pPilha
)) printf("%d ", x
);
}
/*
Imprime a pilha sem mexer nos elementos que já foram colocados
*/
void imprimirPilha(pilha *pPilha){
int i;
for(i=pPilha->pos-1;i>-1;i--)
printf("%d ", pPilha
->dados
[i
]);
}