#include <iostream>
#include <stdlib.h>
using namespace std;
struct node {
int valor;
struct node* sig;
};
typedef struct node Nodo;
struct pila{
Nodo* head;
int tam;
};
typedef struct pila Pila;
Pila* pila_vacia();
void apila(Pila* p, int e);
int desapila(Pila* p);
bool es_vacia(Pila* p);
int main() {
Pila* p;
p = pila_vacia();
apila(p, 5);
apila(p, 3);
apila(p, 1);
cout << desapila(p) << "\n";
cout << desapila(p) << "\n";
cout << desapila(p) << "\n";
cout << desapila(p);
}
Pila* pila_vacia(){
Pila* p = (Pila*) malloc(sizeof(Pila));
p->head = NULL;
p->tam = 0;
return p;
}
void apila(Pila* p, int e){
Nodo* nodo = (Nodo*) malloc(sizeof(Nodo));
if(es_vacia(p)){
cout << "Apila.vacia.\n";
nodo->valor = e;
nodo->sig = NULL;
p->head = nodo;
p->tam = 1;
}
else{
cout << "lleno: " << (p->head)->valor << "\n";
nodo->valor = (p->head)->valor;
nodo->sig = (p->head)->sig;
(p->head)->valor = e;
(p->head)->sig = nodo;
p->tam = p->tam + 1;
}
}
int desapila(Pila* p){
int valor;
if(es_vacia(p)){
cout<< "ERROR: PILA VACIA.\n";
exit(-1);
}
else if(p->tam == 1){
p->tam = 0;
valor = (p->head)->valor;
free(p->head);
p->head = NULL;
}
else{
p->tam = p->tam - 1;
valor = (p->head)->valor;
Nodo* cabeza = p->head;
p->head = ((p->head)->sig);
free(cabeza);
}
return valor;
}
bool es_vacia(Pila* p){
return (p->tam == 0);
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3RkbGliLmg+Cgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKc3RydWN0IG5vZGUgewoJaW50IHZhbG9yOwoJc3RydWN0IG5vZGUqIHNpZzsKfTsKdHlwZWRlZiBzdHJ1Y3Qgbm9kZSBOb2RvOwoKc3RydWN0IHBpbGF7CglOb2RvKiBoZWFkOwoJaW50IHRhbTsKfTsKdHlwZWRlZiBzdHJ1Y3QgcGlsYSBQaWxhOwoKUGlsYSogcGlsYV92YWNpYSgpOwp2b2lkIGFwaWxhKFBpbGEqIHAsIGludCBlKTsKaW50IGRlc2FwaWxhKFBpbGEqIHApOwpib29sIGVzX3ZhY2lhKFBpbGEqIHApOwoKaW50IG1haW4oKSB7CglQaWxhKiBwOwoJCglwID0gcGlsYV92YWNpYSgpOwoJCglhcGlsYShwLCA1KTsKCWFwaWxhKHAsIDMpOwoJYXBpbGEocCwgMSk7CgkKCWNvdXQgPDwgZGVzYXBpbGEocCkgPDwgIlxuIjsKCWNvdXQgPDwgZGVzYXBpbGEocCkgPDwgIlxuIjsKCWNvdXQgPDwgZGVzYXBpbGEocCkgPDwgIlxuIjsKCWNvdXQgPDwgZGVzYXBpbGEocCk7Cn0KClBpbGEqIHBpbGFfdmFjaWEoKXsKCVBpbGEqIHAgPSAoUGlsYSopIG1hbGxvYyhzaXplb2YoUGlsYSkpOwoJcC0+aGVhZCA9IE5VTEw7CglwLT50YW0gPSAwOwoJcmV0dXJuIHA7Cn0Kdm9pZCBhcGlsYShQaWxhKiBwLCBpbnQgZSl7CglOb2RvKiBub2RvID0gKE5vZG8qKSBtYWxsb2Moc2l6ZW9mKE5vZG8pKTsKCQoJaWYoZXNfdmFjaWEocCkpewoJCWNvdXQgPDwgIkFwaWxhLnZhY2lhLlxuIjsKCQlub2RvLT52YWxvciA9IGU7CgkJbm9kby0+c2lnID0gTlVMTDsKCQkKCQlwLT5oZWFkID0gbm9kbzsKCQlwLT50YW0gPSAxOwoJfQoJZWxzZXsKCQljb3V0IDw8ICJsbGVubzogIiA8PCAocC0+aGVhZCktPnZhbG9yIDw8ICJcbiI7CgkJbm9kby0+dmFsb3IgPSAocC0+aGVhZCktPnZhbG9yOwoJCW5vZG8tPnNpZyA9IChwLT5oZWFkKS0+c2lnOwoJCQoJCShwLT5oZWFkKS0+dmFsb3IgPSBlOwoJCShwLT5oZWFkKS0+c2lnID0gbm9kbzsKCQlwLT50YW0gPSBwLT50YW0gKyAxOwoJfQp9CmludCBkZXNhcGlsYShQaWxhKiBwKXsKCWludCB2YWxvcjsKCWlmKGVzX3ZhY2lhKHApKXsKCQljb3V0PDwgIkVSUk9SOiBQSUxBIFZBQ0lBLlxuIjsKCQlleGl0KC0xKTsKCX0KCWVsc2UgaWYocC0+dGFtID09IDEpewoJCXAtPnRhbSA9IDA7CgkJdmFsb3IgPSAocC0+aGVhZCktPnZhbG9yOwoJCWZyZWUocC0+aGVhZCk7CgkJcC0+aGVhZCA9IE5VTEw7Cgl9CgllbHNlewoJCXAtPnRhbSA9IHAtPnRhbSAtIDE7CgkJdmFsb3IgPSAocC0+aGVhZCktPnZhbG9yOwoJCU5vZG8qIGNhYmV6YSA9IHAtPmhlYWQ7CgkJcC0+aGVhZCA9ICgocC0+aGVhZCktPnNpZyk7CgkJZnJlZShjYWJlemEpOwoJfQoJcmV0dXJuIHZhbG9yOwp9CmJvb2wgZXNfdmFjaWEoUGlsYSogcCl7CglyZXR1cm4gKHAtPnRhbSA9PSAwKTsKfQ==