Ayuda con programa en C de Pilas

Iniciado por Emily, 2 Febrero 2019, 07:43 AM

0 Miembros y 1 Visitante están viendo este tema.

Emily

Hola a todos
verán tengo que realizas un programa en c utilizando pilas
Al programa le tengo que ingresar una ecuación ejemplo {(3+3)} de esta ecuación solo tengo que guardar el {,( en una pila pero cuando detecte los ),} tengo que eliminar la pila en donde se encuentra su pareja

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <string.h>

typedef struct Nodo{
int Dato;
struct Nodo *sig;
}Nodo;

Nodo *Crear(char dato){
Nodo *espacio;
espacio=(Nodo*)malloc(sizeof(Nodo));
espacio->Dato=dato;
espacio->sig=NULL;
return espacio;
}

Nodo *Alta(char dato,Nodo *cima){
Nodo *box;
box=Crear(dato);
if(cima==NULL){
cima=box;
}else{
box->sig=cima;
cima=box;
}
return cima;
}

void Mostrar(Nodo *cima){
if(cima==NULL){
printf("\nNo hay ningun dato\n");
}else{
while(cima!=NULL){
printf ("\n| %c |\n ___  ",cima->Dato);
            cima=cima->sig;
}
printf("\n");
}
}

Nodo *Baja(Nodo *cima){
Nodo *aux;
if(cima==NULL){
return 0;
}else{
aux=cima;
cima=aux->sig;
free(aux);
return cima;
}
}


int main(){
int c;
struct Nodo *Pila;
    Pila=NULL;
    while (EOF != (c=getchar())){
    switch (c){
    case '(':
    Pila=Alta(c,Pila);
    break;
    case '{':
    Pila=Alta(c,Pila);
    break;
    case '[':
    Pila=Alta(c,Pila);
    break;
    case ')':
   
    break;
}
}
Mostrar(Pila); 
}

tengo este avance de mi código, ya guarda en las pilas los (,{,[ pero no se de que manera decirle que cuando encuentre un ),},] y coincida con el ultimo que se ingreso lo elimine
por favor alguien explíqueme de que manera puedo compararlos

MAFUS

Cuándo te encuentres un ), ], } vas vaciando la pila y realizando operaciones hasta que te encuentres con su par.

*Si llegas a un símbolo diferente o al inicio de la pila es que la entrada está mal construida.

Cuándo llegues al par introduces en la pila el valor resultante de las operaciones que has realizado hasta ahora y continuas leyendo la entrada.

Emily

Eso es lo que necesito hacer pero ya me atore en las comparaciones

Emily

Ya logre avanzar mas con mi programa, pero ahora mi duda es como puedo hacer la comparación de que cuando al inicio de la cadena se ingrese un ),],} marque un error
Aquí esta mi código
Alguien de favor me podría decir una manera con la cual pueda hacer la comparación o explicarme una forma de hacerla

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <string.h>

typedef struct Nodo{
int Dato;
struct Nodo *sig;
}Nodo;

Nodo *Crear(char dato){
Nodo *espacio;
espacio=(Nodo*)malloc(sizeof(Nodo));
espacio->Dato=dato;
espacio->sig=NULL;
return espacio;
}

Nodo *Alta(char dato,Nodo *cima){
Nodo *box;
box=Crear(dato);
if(cima==NULL){
cima=box;
}else{
box->sig=cima;
cima=box;
}
return cima;
}

void Mostrar(Nodo *cima){
if(cima==NULL){
printf("\nNo hay ningun dato\n");
}else{
while(cima!=NULL){
printf ("\n| %c |\n ___  ",cima->Dato);
            cima=cima->sig;
}
printf("\n");
}
}

Nodo *Baja(Nodo *cima){
Nodo *aux;
if(cima==NULL){
return 0;
}else{
aux=cima;
cima=aux->sig;
free(aux);
return cima;
}
}


int main(){
int c;
struct Nodo *Pila;
    Pila=NULL;
    while (EOF != (c=getchar())){
    switch (c){
    case '(':
    Pila=Alta(c,Pila);
    break;
    case '{':
    Pila=Alta(c,Pila);
    break;
    case '[':
    Pila=Alta(c,Pila);
    break;
    case ')':
    if ((Pila->Dato)=='('){
    Pila=Baja(Pila);
}else{
printf("La ecuacion no esta balanceada");
return 0;
}
    break;
    case ']':
    if ((Pila->Dato)=='['){
    Pila=Baja(Pila);
}else{
printf("La ecuacion no esta balanceada");
return 0;
}
    break;
    case '}':
    if ((Pila->Dato)=='{'){
    Pila=Baja(Pila);
}else{
printf("La ecuacion no esta balanceada");
return 0;
}
    break;
}
}
printf("La ecuacion esta balanceada");
Mostrar(Pila);
}