#include #include const int MaxPila=10; // El Turbo C++ es un maldito bisexual, acepta sentencias tanto en c como en c++ // y las compila juntas (wtf), aqui elimine la sentencia "enum boolean..." por que // en C++ ya hay una palabra reservada "bool" que define un tipo de dato booleano :P enum {Nulo=-1}; typedef int Posicion; typedef int TipoDato; struct Pila{ Posicion Tope; struct Dato{ TipoDato d; Dato *next; }; }; struct Nodo{ Posicion Tope; struct Dato{ TipoDato d; Dato *next; }; }; void CrearPila(Pila &P){ P.Tope=Nulo; } bool PilaVacia(Pila P){ bool Resultado=false; if (P.Tope==Nulo){ Resultado=true; } return (Resultado); } bool PilaLlena(Pila P){ bool Resultado=false; if (P.Tope+1==MaxPila){ Resultado=true; } return(Resultado); } TipoDato Tope(Pila P){ TipoDato e; e=P.Dato[P.Tope]; return (e); } bool Apilar(Pila &P, TipoDato e){ bool Resultado=false; if (PilaLlena(P)==false){ Resultado=true; P.Tope++; P.Dato[P.Tope]=e; } return (Resultado); } bool Desapilar(Pila &P){ bool Resultado=false; if (PilaVacia(P)==false){ Resultado=true; P.Tope--; } return(Resultado); } void Ingresar_Dato(TipoDato &Nodo){ TipoDato Valor; system("clear"); printf("\nIngrese en valor del nodo:"); scanf("%i",&Valor); Nodo=Valor; } void Imprimir_Nodo(TipoDato &Nodo){ printf("\nValor Tope: "); printf("%i",Nodo); } int main(){ Pila P; TipoDato e; char opcion; bool resultado=false; CrearPila(P); do { system("clear"); printf("Ponte las Pilas 1.1b\n"); printf(" 1.- Crear Pila\n"); printf(" 2.- Verificar si la Pila esta Vacia\n"); printf(" 3.- Verificar si la Pila esta Llena\n"); printf(" 4.- Desapilar un elemento\n"); printf(" 5.- Apilar un elemento\n"); printf(" 6.- Elemento Tope\n"); printf(" 0.- Salir\n"); printf("Ingrese Opcion:"); opcion=getchar(); switch (opcion){ case '1': CrearPila(P); printf("\nPila creada o inicializada\n"); getchar(); break; case '2': resultado=PilaVacia(P); if (resultado==true){ printf("\nLa Pila se encuentra VACIA\n"); } else{ printf("\nLa Pila NO se encuentra VACIA\n"); } getchar(); break; case '3': resultado=PilaLlena(P); if (resultado==true){ printf("\nLa Pila se encuentra LLENA\n"); } else{ printf("\nLa Pila NO se encuentra LLENA\n"); } getchar(); break; case '4': resultado=Desapilar(P); if (resultado==true){ printf("\nSe ha desapilado un elemento correctamente\n"); } else{ printf("\nNO se ha podido Desapilar un elemento\n"); } getchar(); break; case '5': Ingresar_Dato(e); resultado=Apilar(P,e); if (resultado==true){ printf("\nSe ha podido APILAR el nodo CORRECTAMENTE\n"); } else{ printf("\nNO se ha podido apilar el nodo\n"); } getchar(); break; case '6': resultado=PilaVacia(P); if (resultado==false){ e=Tope(P); Imprimir_Nodo(e); } else{ printf("La pila se encuentra VACIA, NO se puede mostrar TOPE\n"); } getchar(); break; case '0': break; default: break; } } while(opcion!='0'); return 0; }