-2
Hey, how you doing? So, I needed to do a function on a dynamic stack to test whether two stacks containing integers are equal, i.e., to see if two values are of the same content and in the same order. For now what I have is this code, which stacks, pops and displays values, but still lacks the function to compare. Can anyone help me?
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
/// Estrutura TipoPilha
typedef struct {
char letra;
}TipoItem;
typedef struct TipoCelula *TipoApontador;
typedef struct TipoCelula {
TipoItem Item;
TipoApontador Prox;
} TipoCelula;
typedef struct {
TipoApontador Fundo, Topo;
int Tamanho;
} TipoPilha;
// Funções de manipulação da pilha
void FPVazia(TipoPilha *Pilha) {
Pilha ->Topo=(TipoApontador) malloc(sizeof(TipoCelula ));
Pilha ->Fundo = Pilha ->Topo;
Pilha ->Topo->Prox = NULL;
Pilha ->Tamanho;
}
int Vazia(TipoPilha Pilha) {
return (Pilha.Topo == Pilha.Fundo);
}
void Empilha(TipoItem x, TipoPilha *Pilha) {
TipoApontador Aux;
Aux = (TipoApontador) malloc(sizeof(TipoCelula));
Pilha->Topo->Item = x;
Aux->Prox = Pilha ->Topo;
Pilha ->Topo = Aux;
Pilha ->Tamanho++;
}
void Desempilha(TipoPilha *Pilha , TipoItem *Item) {
TipoApontador q;
if (Vazia(*Pilha ) ) {
printf ( "Erro : lista vazia\n" ) ; return;
}
q = Pilha ->Topo;
Pilha ->Topo = q ->Prox;
*Item = q ->Prox->Item;
free(q) ;
Pilha ->Tamanho--;
}
int Tamanho(TipoPilha Pilha) {
return (Pilha.Tamanho) ;
}
void ExibePilha(TipoPilha Pilha){
TipoApontador aux=Pilha.Topo->Prox;
while(aux!=NULL){
printf("\n %c", aux->Item.letra);
aux=aux->Prox;
}
}
main(){
TipoPilha pilha;
FPVazia(&pilha);
TipoItem item;
int op=-1;
while(op!=0){
printf("\n0- Sair");
printf("\n1- Empilha");
printf("\n2- Desempilha");
printf("\n3- Exibe a pilha");
printf("\nDigite sua opcao: "); scanf("%d", &op);
switch(op){
case 1:
printf("Digite a letra a ser empilhada: ");
fflush(stdin);
scanf("%c", &item.letra);
Empilha(item, &pilha);
break;
case 2:
Desempilha(&pilha, &item);
printf("\nItem desempilhado: %c", item.letra);
break;
case 3:
printf("\n*** Exibindo a pilha*** \n");
ExibePilha(pilha);
break;
}
}
}`