Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Emily en 2 Febrero 2019, 07:43 am



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

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <conio.h>
  4. #include <string.h>
  5.  
  6. typedef struct Nodo{
  7. int Dato;
  8. struct Nodo *sig;
  9. }Nodo;
  10.  
  11. Nodo *Crear(char dato){
  12. Nodo *espacio;
  13. espacio=(Nodo*)malloc(sizeof(Nodo));
  14. espacio->Dato=dato;
  15. espacio->sig=NULL;
  16. return espacio;
  17. }
  18.  
  19. Nodo *Alta(char dato,Nodo *cima){
  20. Nodo *box;
  21. box=Crear(dato);
  22. if(cima==NULL){
  23. cima=box;
  24. }else{
  25. box->sig=cima;
  26. cima=box;
  27. }
  28. return cima;
  29. }
  30.  
  31. void Mostrar(Nodo *cima){
  32. if(cima==NULL){
  33. printf("\nNo hay ningun dato\n");
  34. }else{
  35. while(cima!=NULL){
  36. printf ("\n| %c |\n ___  ",cima->Dato);
  37.            cima=cima->sig;
  38. }
  39. printf("\n");
  40. }
  41. }
  42.  
  43. Nodo *Baja(Nodo *cima){
  44. Nodo *aux;
  45. if(cima==NULL){
  46. return 0;
  47. }else{
  48. aux=cima;
  49. cima=aux->sig;
  50. free(aux);
  51. return cima;
  52. }
  53. }
  54.  
  55.  
  56. int main(){
  57. int c;
  58. struct Nodo *Pila;
  59.    Pila=NULL;
  60.    while (EOF != (c=getchar())){
  61.     switch (c){
  62.     case '(':
  63.     Pila=Alta(c,Pila);
  64.     break;
  65.     case '{':
  66.     Pila=Alta(c,Pila);
  67.     break;
  68.     case '[':
  69.     Pila=Alta(c,Pila);
  70.     break;
  71.     case ')':
  72.  
  73.     break;
  74. }
  75. }
  76. Mostrar(Pila);  
  77. }
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

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <conio.h>
  4. #include <string.h>
  5.  
  6. typedef struct Nodo{
  7. int Dato;
  8. struct Nodo *sig;
  9. }Nodo;
  10.  
  11. Nodo *Crear(char dato){
  12. Nodo *espacio;
  13. espacio=(Nodo*)malloc(sizeof(Nodo));
  14. espacio->Dato=dato;
  15. espacio->sig=NULL;
  16. return espacio;
  17. }
  18.  
  19. Nodo *Alta(char dato,Nodo *cima){
  20. Nodo *box;
  21. box=Crear(dato);
  22. if(cima==NULL){
  23. cima=box;
  24. }else{
  25. box->sig=cima;
  26. cima=box;
  27. }
  28. return cima;
  29. }
  30.  
  31. void Mostrar(Nodo *cima){
  32. if(cima==NULL){
  33. printf("\nNo hay ningun dato\n");
  34. }else{
  35. while(cima!=NULL){
  36. printf ("\n| %c |\n ___  ",cima->Dato);
  37.            cima=cima->sig;
  38. }
  39. printf("\n");
  40. }
  41. }
  42.  
  43. Nodo *Baja(Nodo *cima){
  44. Nodo *aux;
  45. if(cima==NULL){
  46. return 0;
  47. }else{
  48. aux=cima;
  49. cima=aux->sig;
  50. free(aux);
  51. return cima;
  52. }
  53. }
  54.  
  55.  
  56. int main(){
  57. int c;
  58. struct Nodo *Pila;
  59.    Pila=NULL;
  60.    while (EOF != (c=getchar())){
  61.     switch (c){
  62.     case '(':
  63.     Pila=Alta(c,Pila);
  64.     break;
  65.     case '{':
  66.     Pila=Alta(c,Pila);
  67.     break;
  68.     case '[':
  69.     Pila=Alta(c,Pila);
  70.     break;
  71.     case ')':
  72.     if ((Pila->Dato)=='('){
  73.     Pila=Baja(Pila);
  74. }else{
  75. printf("La ecuacion no esta balanceada");
  76. return 0;
  77. }
  78.     break;
  79.     case ']':
  80.     if ((Pila->Dato)=='['){
  81.     Pila=Baja(Pila);
  82. }else{
  83. printf("La ecuacion no esta balanceada");
  84. return 0;
  85. }
  86.     break;
  87.     case '}':
  88.     if ((Pila->Dato)=='{'){
  89.     Pila=Baja(Pila);
  90. }else{
  91. printf("La ecuacion no esta balanceada");
  92. return 0;
  93. }
  94.     break;
  95. }
  96. }
  97. printf("La ecuacion esta balanceada");
  98. Mostrar(Pila);
  99. }