Test Foro de elhacker.net SMF 2.1

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

#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
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;
}
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);
}