PILAS.c



// REVISA EL EQUILIBRIO DE LOS PARENTESIS EN UNA EXPRESION

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


struct Nodo
{
	char Dato;
	struct Nodo *Sig;
};

struct Nodo *Pila = NULL;


struct Nodo *Crea_Nodo(char LETRA)
{
	struct Nodo *Nuevo = (struct Nodo *)malloc(sizeof(struct Nodo ));
	
	Nuevo->Dato = LETRA;
	Nuevo->Sig = NULL;
}


void pop()
{
	if (!empty()) Pila = Pila->Sig;
	else printf("PILA VACIA ... ¡¡¡ ERROR  !!!\n");
}

int empty()
{
	if ( Pila == NULL ) return 1;
	return 0;
}


void push(struct Nodo *Nuevo)
{
	if (empty( )) Pila = Nuevo;
	else { Nuevo->Sig = Pila; Pila = Nuevo; }
}


int Revise_Parentesis(char *EXPR)
{
	int Indice = 0;	
	
	while(EXPR[Indice] != '\0')
	{
		if (EXPR[Indice] == '(')	push(Crea_Nodo(EXPR[Indice]));
		if (EXPR[Indice] == ')')	pop();
		Indice++;
	}
	return empty();
}

void Lee_Expresion(char *Expresion)
{
	printf("Introduce una expresiOn matemAtica: ");
	gets(Expresion);
}

int main()
{
	char *Expresion = (char *)malloc(sizeof(char)*100);
	Lee_Expresion(Expresion);
	if (Revise_Parentesis(Expresion)) printf("EXPRESION CORRECTA ... \n");
	else printf("EXPRESION INCORRECTA ...\n");
	return 1;
}