4- Desenvolva uma função para testar se duas pilhas P1 e P2 são iguais.
#include
#include
#include "Pilha.h"
int main ()
{
// As operações abaixo exemplificam a utilização de uma Pilha
TipoPilha *Topo1;
TipoInfo dado;
Topo1 = InicializaPilha(Topo1);
Topo1 = PushPilha(Topo1,2);
Topo1 = PushPilha(Topo1,4);
Topo1 = PushPilha(Topo1,6);
Topo1 = PushPilha(Topo1,8);
Topo1 = PushPilha(Topo1,10);
ImprimirPilha(Topo1);
Topo1 = PopPilha(Topo1, &dado);
printf("elemento %d retirado da pilha\n\n",dado);
Topo1 = PopPilha(Topo1, &dado);
printf("elemento %d retirado da pilha\n\n",dado);
if (Vazia(Topo1))
printf("a pilha esta vazia\n\n");
else
printf("a pilha não esta vazia\n\n");
Topo1 = PopPilha(Topo1, &dado);
printf("elemento %d retirado da pilha\n\n",dado);
Topo1 = PopPilha(Topo1, &dado);
printf("elemento %d retirado da pilha\n\n",dado);
Topo1 = PopPilha(Topo1, &dado);
printf("elemento %d retirado da pilha\n\n",dado);
if (Vazia(Topo1))
printf("a pilha esta vazia\n\n");
else
printf("a pilha não esta vazia\n\n");
system("pause");
}
Pilha.c;
#include
#include
#include "Pilha.h"
TipoPilha* InicializaPilha (TipoPilha *Topo)
{
return NULL;
}
int Vazia (TipoPilha *Topo)
{
if (Topo==NULL)
return 1;
else
return 0;
}
void ImprimirPilha (TipoPilha *Topo)
{
TipoPilha *ptaux;
if (Topo != NULL)
{
puts("---Imprimindo pilha---");
for (ptaux=Topo; ptaux!=NULL; ptaux=ptaux->elo)
printf("%d\n",ptaux->dado);
puts("-------Fim pilha------");
}
else
puts("Pilha vazia");
}
TipoPilha* PushPilha (TipoPilha *Topo, TipoInfo Dado)
{
TipoPilha *novo; //novo elemento
/*aloca um novo nodo */
novo = (TipoPilha*) malloc(sizeof(TipoPilha));
novo->elo = NULL;
/*insere a informação no novo nodo*/
novo->dado = Dado;
/*encaeia o elemento*/
novo->elo = Topo;
Topo = novo;
return Topo;
}
TipoPilha* PopPilha (TipoPilha *Topo, TipoInfo *Dado)
{
TipoPilha* ptaux;
if (Topo == NULL)
return NULL; //não tem nada na pilha
else
{
*Dado = (Topo)->dado; //devolve o valor do topo
ptaux = Topo; //guarda o endereço do topo
Topo = (Topo)->elo; //o próximo passa a ser o topo
free(ptaux); //libera o que estava no topo
ptaux=NULL;
return Topo; //retorna novo topo
}
}
TipoInfo ConsultaPilha (TipoPilha *Topo)
{
if (Topo==NULL)
return 0;
else
return Topo->dado;
}
TipoPilha* DestroiPilha (TipoPilha *Topo)
{
TipoPilha *ptaux;
while (Topo != NULL)
{
ptaux = Topo; //guarda o endereço do topo
Topo = Topo->elo; //o próximo passa a ser o topo
free(ptaux); //libera o que estava no topo
}
return NULL;
}
Pilha.h:
#include
#include
typedef int TipoInfo;
struct TPtPilha
{
TipoInfo dado;
struct TPtPilha *elo;
};
typedef struct TPtPilha TipoPilha;
TipoPilha* InicializaPilha (TipoPilha *Topo);
int Vazia (TipoPilha *Topo);
TipoPilha* PushPilha (TipoPilha *Topo, TipoInfo Dado);
TipoPilha* PopPilha (TipoPilha *Topo, TipoInfo *Dado);
TipoInfo ConsultaPilha (TipoPilha *Topo);
TipoPilha* DestroiPilha (TipoPilha *Topo);
void ImprimirPilha (TipoPilha *Topo);
Para escrever sua resposta aqui, entre ou crie uma conta
Estrutura de Dados I
•ESTÁCIO
Compartilhar