#include <stdlib.h>#include <stdio.h>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 :Penum {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;}