#include <stdio.h>
#include <stdlib.h>
typedef struct list{
char element;
struct list * node;
} list;
int push(char data, list **ptr);
char pop(list **ptr);
int push(char data, list **ptr){
list * tmp;
if( (tmp
= malloc(sizeof(list
))) == NULL
){ fputs("Memory allocation error!\n", stderr
); }
tmp->node = (*ptr)->node;
tmp->element = data;
(*ptr)->node = tmp;
return 0;
}
char pop(list **ptr){
if( (*ptr)->node != NULL ){
char tmp;
list * temp = (*ptr)->node;
tmp = (*ptr)->node->element;
(*ptr)->node = (*ptr)->node->node;
return tmp;
} else {
printf("\nMismatched pop!\n"); exit(0); //Not a program error.. }
}
int main(){
list * head;
int i;
for(i = 0;i <= 10; i++)
push(i, &head);
for(i = 0;i <= 10; i++)
printf("%di: %d\n",i
,pop
(&head
)); return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KCnR5cGVkZWYgc3RydWN0IGxpc3R7CgljaGFyIGVsZW1lbnQ7CglzdHJ1Y3QgbGlzdCAqIG5vZGU7Cn0gbGlzdDsKCmludCBwdXNoKGNoYXIgZGF0YSwgbGlzdCAqKnB0cik7CmNoYXIgcG9wKGxpc3QgKipwdHIpOwoKaW50IHB1c2goY2hhciBkYXRhLCBsaXN0ICoqcHRyKXsKCWxpc3QgKiB0bXA7CglpZiggKHRtcCA9IG1hbGxvYyhzaXplb2YobGlzdCkpKSA9PSBOVUxMICl7CgkJZnB1dHMoIk1lbW9yeSBhbGxvY2F0aW9uIGVycm9yIVxuIiwgc3RkZXJyKTsKCQlleGl0KDEpOwoJfQkKCXRtcC0+bm9kZSA9ICgqcHRyKS0+bm9kZTsKCXRtcC0+ZWxlbWVudCA9IGRhdGE7CgkoKnB0ciktPm5vZGUgPSB0bXA7CglyZXR1cm4gMDsKfQoKY2hhciBwb3AobGlzdCAqKnB0cil7CglpZiggKCpwdHIpLT5ub2RlICE9IE5VTEwgKXsKCQljaGFyIHRtcDsKCQlsaXN0ICogdGVtcCA9ICgqcHRyKS0+bm9kZTsKCQl0bXAgPSAoKnB0ciktPm5vZGUtPmVsZW1lbnQ7CgkJKCpwdHIpLT5ub2RlID0gKCpwdHIpLT5ub2RlLT5ub2RlOwoJCWZyZWUodGVtcCk7CgkJcmV0dXJuIHRtcDsKCX0gZWxzZSB7CgkJcHJpbnRmKCJcbk1pc21hdGNoZWQgcG9wIVxuIik7IAoJCWV4aXQoMCk7IC8vTm90IGEgcHJvZ3JhbSBlcnJvci4uCgl9Cn0KCmludCBtYWluKCl7CglsaXN0ICogaGVhZDsKCWhlYWQgPSBtYWxsb2Moc2l6ZW9mKGxpc3QpKTsKCglpbnQgaTsKCQoJZm9yKGkgPSAwO2kgPD0gMTA7IGkrKykKCQlwdXNoKGksICZoZWFkKTsKCWZvcihpID0gMDtpIDw9IDEwOyBpKyspCgkJcHJpbnRmKCIlZGk6ICVkXG4iLGkscG9wKCZoZWFkKSk7CglyZXR1cm4gMDsKfQ==