Pilhas em C
Nayane Borges Saraiva
Francisco Barbosa
1) Faça uma função que receba duas pilhas e verifique se elas são iguais, retornando verdadeiro ou falso.
#include
#include
typedef struct
{
int item;
} tNo;
typedef struct
{
tNo *vElementos; int topo; int maximo;
} tPilha;
int inicializaPilha(tPilha *p, int maximo); int pilhaVazia(tPilha *p); int pilhaCheia(tPilha *p); int inserePilha(tPilha *ppilha, tNo *pno); int retiraPilha(tPilha *ppilha, tNo *pno); int finalizaPilha(tPilha *p); int comparaNo(tNo *pNo1, tNo *pNo2); void preenchePilha(tPilha *p, int numPilha, int numSerie);
int pilhasIguais(tPilha *p1, tPilha *p2);
#define NSERIES 3 const int vTamanhos[NSERIES][2] = {{5, 5}, {5, 5}, {5, 3}}; const int serie[NSERIES][2][5]=
{
{ {1, 2, 3, 4, 5}, {1, 2, 3, 4, 5} }, { {1, 2, 3, 4, 5}, {1, 2, 5, 4, 3} }, { {1, 2, 3, 4, 5}, {1, 2, 3, 4, 5} }
};
void main (void)
{
tPilha vPilha[2]; int i;
for(i=0; ivElementos = (tNo *) malloc (sizeof(tNo) * maximo); if (p->vElementos == NULL) return 0; p->maximo = maximo; p->topo = 0; return -1;
}
int finalizaPilha(tPilha *p)
{
free(p->vElementos); return -1;
}
int pilhaVazia(tPilha *p)
{
if (p->topo == 0) return 1; else return 0;
}
int pilhaCheia(tPilha *p)
{
if (p->topo == p->maximo) return 1; else return 0;
}
int inserePilha(tPilha *ppilha, tNo *pno)
{
if (pilhaCheia(ppilha)) return 0; ppilha->vElementos[ppilha->topo] = *pno; ppilha->topo++; return 1;
}
int retiraPilha(tPilha *ppilha, tNo *pno)
{
if (pilhaVazia(ppilha)) return 0; ppilha->topo--; *pno = ppilha->vElementos[ppilha->topo]; return 1;
}
int comparaNo(tNo *pNo1, tNo *pNo2)
{
return pNo1->item - pNo2->item;
}
void preenchePilha(tPilha *p, int numPilha, int numSerie)
{
int i; tNo no;
for(i=0; !pilhaCheia(p); i++) { no.item =