const int MAX=10; typedef struct tnodo *pnodo; typedef struct tnodo { int dato; pnodo sig; }; typedef struct tpila{ int cont; pnodo inicio; pnodo fin; }; void iniciar_pila(tpila &lista){ lista.inicio=NULL; lista.fin=NULL; lista.cont=0; } bool pila_llena(tpila lista){ return(lista.cont==MAX); } bool pila_vacia(tpila lista){ return(lista.cont==0); } void crear(pnodo &nuevo, int valor){ nuevo = new tnodo; if(nuevo != NULL){ nuevo->dato=valor; nuevo->sig=NULL; }else cout<<"MEMORIA INSUFICIENTE"<sig=nuevo; lista.fin=nuevo; } lista.cont++; } } int quitar_pila(tpila &lista){ pnodo extraido,i; int valor; if(pila_vacia(lista)) valor=0; else{ valor=lista.fin->dato; if(lista.inicio==lista.fin){ extraido=lista.inicio; lista.inicio=NULL; lista.fin=NULL; }else{ for(i=lista.inicio;(i->sig)->sig != NULL;i=i->sig); extraido=lista.fin; lista.fin=i; lista.fin->sig=NULL; } lista.cont--; } delete(extraido); return valor; } int tope_pila(tpila &lista){ int valor; if(pila_vacia(lista)==true) valor=0; else{ valor=lista.fin->dato; } return valor; }