const int MAX=10; typedef struct tnodo *pnodo; typedef struct tnodo{ int dato; pnodo sig; }; typedef struct tpila{ pnodo inicio; int cont; pnodo fin; }; //Inicialización void iniciar_pila(tpila &lis) { lis.inicio=NULL; lis.fin=NULL; lis.cont=0; } bool pila_llena(tpila lis) { return (lis.cont==MAX); } bool pila_vacia(tpila lis) { return (lis.cont==0); } //Creación del nodo void crear(pnodo &nuevo, int valor) { nuevo=new tnodo; if(nuevo!=NULL) { nuevo->dato=valor; nuevo->sig=NULL; } else cout<<"Memoria llena"<sig=nuevo; lis.fin=nuevo; lis.cont++; } } } int quitar_pila(tpila &lis) { pnodo aux, i; int valor; if(pila_vacia(lis))//lis.cont==0 lis.fin==NULL valor=-9999; else { valor=lis.fin->dato; if(lis.inicio->sig==NULL) //lis.cont==1 o lis.inicio==lis.fin { aux=lis.inicio; //aux=lis.fin lis.inicio=NULL; lis.fin=NULL; } else {for(i=lis.inicio; (i->sig)!=lis.fin;i=i->sig); aux=lis.fin;//aux=i->sig; lis.fin=i; i->sig=NULL;//lis.fin->sig=NULL; } lis.cont--; } delete(aux); return valor; } int tope_pila(tpila &p) { int valor; if(pila_vacia(p)==true) valor=-9999; else valor=p.fin->dato; return valor; }