#include <windows.h> // incluye librería de windows #include <iostream> //incluye librería de entradas y salidas using namespace std; // esto es para generalizar el uso de espacios struct nodo{ // creación de la estructura nodo int nro; // declarar dato entero struct nodo *sgte; // declarar nodo }; typedef nodo *ptrPila; // Apilar elemento void push( ptrPila &p, int valor ) { //crear método de la pila donde insertara el dato valor ptrPila aux; // creación de puntero con valor aux. aux = new(struct nodo); // el dato aux toma el valor de new aux->nro = valor; // el apuntador nro sera ahora valor aux->sgte = p ; // el apuntador sgte sera ahora p p = aux ; } // el valor de p sera aux // Opciones void menu() { // creación del método menu cout<<"\n\t IMPLEMENTACION DE PILAS EN C++\n\n"; // impresión en escritorio cout<<" 1. APILAR // impresión en escritorio cout<<" 2. DESAPILAR cout<<" 3. MOSTRAR PILA cout<<" 4. DESTRUIR PILA cout<<" 5. SALIR cout<<"\n INGRESE OPCION: "; } "<<endl; "<<endl; "<<endl; "<<endl; "<<endl; // impresión en escritorio // impresión en escritorio // impresión en escritorio // impresión en escritorio // impresión en escritorio //Desapilar el elemento int pop( ptrPila &p ) { // método pop con parámetros int num ; // declarar dato entero ptrPila aux; //declarar aux del tipo ptrPila aux = p ; // cambio de asignación de valor num = aux->nro; // el dato num sera apuntado a nro }p = aux->sgte ; // el dato p sera apuntado aux-> sgte delete(aux); // borrara aux return num; } // retornara el dato num // Mostrar la pila void mostrar_pila( ptrPila p ) { // método mostrar_pila con parámetro ptrPila aux; // declara aux del tipo ptrPila aux = p; // asigna que aux sera p while( aux !=NULL ) { // esto se hara mientras aux sea diferente de null cout<<"\t"<< aux->nro <<endl; // impresión en escritorio aux = aux->sgte; // asigna a aux como sgte } } // Eliminar pila void destruir_pila( ptrPila &p) { // método destruir_pila con parametro ptrPila aux; // declarar dato aux de procedencia ptrPila while( p != NULL) { // hacer mientras p diferente de NULL aux = p; // aux sea asigna ahora a p p = aux->sgte; // p sera igual a sgte delete(aux); }} // se eliminara el dato aux int main() { // se especifica el método main ptrPila p = NULL; // el puntero p se asigna a NULL int dato; // se declara un entero dato int op; // se declara un entero op int x ; // se declara un entero x system("color 0b"); // se adjunta un color a la ventana do // se emplea el do while { menu(); // aplica el método menú cin>> op; switch(op) // guarda el dato op { // se crea un switch case 1: // se maneja el primer caso cout<< "\n NUMERO A APILAR: "; cin>> dato; // se imprime en pantalla push( p, dato ); // se inserta en la pila cout<<"\n\n\t\tNumero " << dato << " apilado...\n\n"; // impresión de pantalla break; // termina el primer caso case 2: // se maneja el segundo caso x = pop( p ); // se asigna x a el método p con parámetro p cout<<"\n\n\t\tNumero "<< x <<" desapilado...\n\n"; // impresión de pantalla break; // se cierra el segundo caso case 3: // se maneja el tercer caso cout << "\n\n MOSTRANDO PILA\n\n"; // impresión en pantalla if(p!=NULL) // condicionante ( si p diferente de NULL) mostrar_pila( p ); // mostrara lo que contiene este metodo else // si no aplica mostrara esto en pantalla cout<<"\n\n\tPila vacia..!"<<endl; break; // se cierra caso tres case 4: // se maneja cuarto caso destruir_pila( p ); // aplicara el método aquí asignado cout<<"\n\n\t\tPila eliminada...\n\n"; // impresión de pantalla break; // se cierra el cuarto caso } cout<<endl<<endl; // se emplea salto de linea system("pause"); system("cls"); // se emplea una pausa en el programa } while(op!=5); // aplica la condición del do while return 0; } // se cierra retornando cero