Pilha em c/c++
#include <stdlib.h>
struct TipoItem { char car;
};
typedef struct TipoCelula *TipoApontador; struct TipoCelula { struct TipoItem Item; TipoApontador Prox;
};
struct TipoPilha { TipoApontador Fundo, Topo; int Tamanho;
} ;
void FPVazia(struct TipoPilha *Pilha)
{
Pilha->Topo = (TipoApontador) malloc (sizeof(struct TipoCelula)); Pilha->Fundo = Pilha->Topo; Pilha->Topo->Prox = NULL; Pilha->Tamanho = 0;
}
void Empilha(struct TipoItem x ,struct TipoPilha *Pilha)
{
TipoApontador Aux; Aux = (TipoApontador) malloc(sizeof(struct TipoCelula)) ; Pilha->Topo->Item = x; Aux->Prox = Pilha->Topo; Pilha->Topo = Aux; Pilha->Tamanho++;
}
void Desempilha(struct TipoPilha *Pilha ,struct TipoItem *Item)
{
TipoApontador q; if(Pilha->Topo == Pilha->Fundo){ printf("Erro:lista vazia\n"); return; } q = Pilha->Topo; Pilha->Topo = q->Prox; *Item = q->Prox->Item; free(q); Pilha->Tamanho++;
}
int Tamanho(struct TipoPilha Pilha)
{
return (Pilha.Tamanho);
}
int Compara(struct TipoPilha *Pilha)
{
int x,z = 1; TipoApontador Aux; Aux = Pilha->Topo->Prox; x = Pilha->Tamanho; while(Aux != NULL) { if((x%2 == 0)&&(Aux->Item.car != 'P')) z = 0; else if((x%2 != 0)&&(Aux->Item.car == 'P')) z = 0; Aux = Aux->Prox; x--; } return z;
}
void Imprime(struct TipoPilha *Pilha)
{
TipoApontador Aux; Aux = Pilha->Topo; while(Aux != NULL) { printf(" %c - ",Aux->Item.car); Aux=Aux->Prox; } printf("\n");
}
int main()
{
struct TipoPilha Pilha,Pilha2; struct TipoItem Item; FPVazia(&Pilha); char op = '1'; int h,i; while(op != '0') { system("cls"); printf("1 - Empilhar 1 caracter \n"); printf("2 - Desempilhar\n"); printf("3 - Imprimir\n"); printf("4 - Comparar\n"); printf("5 - Empilhar varios caracter\n"); printf("0 - sair\n"); scanf(" %c",&op); if(op == '1') { system("cls"); printf("Digite o caracter: ");