Título: Ayuda con programa en C de Pilas
Publicado por: Emily en 2 Febrero 2019, 07:43 am
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; } } } Nodo *Baja(Nodo *cima){ Nodo *aux; if(cima==NULL){ return 0; }else{ aux=cima; cima=aux->sig; return cima; } } int main(){ int c; struct Nodo *Pila; Pila=NULL; 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
Título: Re: Ayuda con programa en C de Pilas
Publicado por: MAFUS en 2 Febrero 2019, 13:46 pm
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.
Título: Re: Ayuda con programa en C de Pilas
Publicado por: Emily en 3 Febrero 2019, 08:22 am
Eso es lo que necesito hacer pero ya me atore en las comparaciones
Título: Re: Ayuda con programa en C de Pilas
Publicado por: Emily en 3 Febrero 2019, 09:08 am
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; } } } Nodo *Baja(Nodo *cima){ Nodo *aux; if(cima==NULL){ return 0; }else{ aux=cima; cima=aux->sig; return cima; } } int main(){ int c; struct Nodo *Pila; Pila=NULL; 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); }
|