Ver Mensaje Individual
  #1 (permalink)  
Antiguo 08/07/2015, 20:06
EdGomez160295
 
Fecha de Ingreso: julio-2015
Mensajes: 1
Antigüedad: 8 años, 10 meses
Puntos: 0
Exclamación parentesis balanceados

Ayuda con el siguiente codigo en c ya que no me marca error pero creo que no esta agregando correctamente los elementos a la pila.
(es necesario usar la pila con una estructura tal cual y tambien los NodoL)
El programa debe analizar una funcion dada por el usuario y decir si los parentesis, corchetes y llaves estan balanceados; es decir, si la funcion tiene un "(" que haya un ")" y asi con los demas.


#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct nodoL{
void **dato;
struct nodoL *sig;
};
typedef struct nodoL NodoL;

struct pila{
NodoL *cab;
};
typedef struct pila Pila;

Pila *creaPila(){
Pila *nvo=(Pila *)malloc(sizeof(Pila));
nvo->cab=NULL;
return nvo;
}

NodoL *creaNodoL(void *dato, NodoL *cab){
NodoL *nvo=(NodoL *)malloc(sizeof(NodoL));
nvo->dato=dato;
nvo->sig=cab;
return nvo;
}

void insertaIni(void *dato, NodoL **cab){
*cab=creaNodoL(dato,*cab);
}

NodoL *eliminaIni(NodoL **cab){
NodoL *p;
if(*cab==NULL)
return NULL;
p=*cab;
*cab=p->sig;
p->sig=NULL;
return p;
}

void push(Pila *p, void *dato){
insertaIni(dato,&(p->cab));
}

void *pop(Pila *p){
eliminaIni(&(p->cab));
}

int pila_vacia(Pila *pila)
{
return pila==NULL;
}

char *creaChar(char c){
char *nvo=(char*)malloc(sizeof(char));
*nvo=c;
return nvo;
}

int verifi(char cad[], char ca, char cc){
int i=0, bal=1;
Pila *p;
p=creaPila();
while(cad[i]!='\0' && bal==1){
if(cad[i]==ca){
push(p,(void*)creaChar(cad[i]));
}
else{
if(cad[i]==cc){
if(pila_vacia(p)!=1){
pop(p);
}
else{
bal=0;
}
}
}
i++;
}
if(bal==1 && pila_vacia(p)!=1){
bal=0;
}
while(pila_vacia(p)!=1){
pop(p);
}
return bal;
}

int main(){
char cad[100];
printf("\n\t....Verificacion de parentesis, corchetes y llaves balanceados....\n\n\n");
printf("Ingrese funcion: ");
scanf("%s",&cad);
if (verifi(cad,'(',')')==1)
printf("\n\n\nParentesis balanceados");
else
printf("\n\nParentesis no balanceados");
if (verifi(cad,'[',']')==1)
printf("\n\nCorchetes balanceados");
else
printf("\n\nCorchetes no balanceados");
if (verifi(cad,'{','}')==1)
printf("\n\nLlaves balanceadas\n\n\n");
else
printf("\n\nLlaves no balanceadass\n\n\n");
system("pause");
return 0;
}