Como ven, el dato que saque de la pila sigue Imprimiéndose en pantalla, peo cuando vuelvo a repetr la opcion entonces ya no aparece, sopungo que tiene que ver el ciclo while de la funcion, pero no logro entender por que sucede.Tambien tengo problemas con la funcion encargada de liberar la memoria. Si alguien me pudiera ayudar a clarar la logica de estos temas se lo agrdeceria
Código
#include <iostream> #include <stdlib.h> using namespace std; struct pila{ int elemento; pila *enlace; }; void push( ); void pop(); void display(); void liberar(); pila *p_aux; pila *p_pila=NULL; int main(){ int opcion; cout<<"Pila de tipo dinamica"<<endl; cout<<"\tMenu\n"; cout<<"1)Insertar nuevo elemento a la pila"<<endl; cout<<"2)Sacar elemento de la pila"<<endl; cout<<"3)Mostrar los elementos de la pila"<<endl; cout<<"4)Liberar memoria"<<endl; cout<<"5)Salir\n\n"; do{ cout<<"Escoga un opcion:"<<endl; cin>>opcion; switch(opcion){ case 1: push();break; case 2: pop();break; case 3: display();break; case 4: liberar();break; case 5: cout<<"Saliendo del programa";break; default: cout<<"Opcion no valida"; } }while(opcion!=5);system("cls"); return 0; } void push(){ p_aux=new pila; cout<<"\tDigite un numero"<<endl; cin>>p_aux->elemento; p_aux->enlace=p_pila; p_pila=p_aux; } void pop(){ if(p_pila==NULL){ cout<<"\tLa pila esta vacia"<<endl;} else{ p_pila=p_aux->enlace; cout<<"\tElemento "<<p_aux->elemento<<" sacado de la pila con exito"<<endl; delete p_aux; pila *p_aux=p_pila;} } void display(){ if(p_pila==NULL) cout<<"\tNo hay elementos que mostrar en la pila"<<endl; else{ cout<<"\tMostrando elementos"<<endl; do{ cout<<"\t"<<p_aux->elemento<<endl; p_aux=p_aux->enlace; }while(p_aux!=NULL);} p_aux=p_pila; } void liberar(){ if(p_pila!=NULL){ cout<<"\tLiberando la memoria"<<endl; while(p_pila!=NULL){ p_pila=p_aux->enlace; delete p_aux; pila *p_aux=p_pila;} } }
MOD: El código debe ir entre etiquetas de Código GeSHi