#include <stdio.h>
#include <stdlib.h>
/* http://p...content-available-to-author-only...a.org/wiki/Stos_(informatyka)#Lista */
typedef struct el {
struct el *prev;
int val;
} el;
typedef struct {
el *top;
} lifo;
lifo *lifo_init(void) {
lifo
*l
= malloc(sizeof(lifo
)); l->top = NULL;
return l;
}
void lifo_push(lifo *l, int num) {
new->val = num;
new->prev = l->top;
l->top = new;
}
int lifo_pop(lifo *l) {
el *tofree = l->top;
int ret = tofree->val;
l->top = tofree->prev;
return ret;
}
void lifo_show(const lifo *l) {
el *next = l->top;
while(next) {
next = next->prev;
}
}
void lifo_clean(lifo *l) {
el *next, *tofree = l->top;
while(tofree) {
next = tofree->prev;
tofree = next;
}
l->top = NULL;
}
void lifo_free(lifo *l) {
if(!l) return;
lifo_clean(l);
}
#define IDEONE
int userinput(void) {
#ifndef IDEONE
printf("[1] Dodaj element\n"); printf("[2] Zdejmij element\n"); printf("[3] Wyswietl stos\n"); printf("[0] Wyjście z programu\n"); #endif IDEONE
int input;
return input;
}
int main(void) {
lifo *l = lifo_init();
int choice = -1;
while((choice = userinput())) {
switch(choice) {
int num;
case 1:
lifo_push(l,num);
break;
case 2:
printf("Zdjeto: %d\n",lifo_pop
(l
)); break;
case 3:
lifo_show(l);
break;
case 4:
lifo_clean(l);
break;
case 5:
lifo_free(l);
l = NULL; /* bez wiszacych wskaznikow */
break;
}
}
/* zwalnanie pamieci */
lifo_free(l);
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KCi8qIGh0dHA6Ly9wLi4uY29udGVudC1hdmFpbGFibGUtdG8tYXV0aG9yLW9ubHkuLi5hLm9yZy93aWtpL1N0b3NfKGluZm9ybWF0eWthKSNMaXN0YSAqLwoKdHlwZWRlZiBzdHJ1Y3QgZWwgewoJc3RydWN0IGVsICpwcmV2OwoJaW50IHZhbDsKfSBlbDsKCnR5cGVkZWYgc3RydWN0IHsKCWVsICp0b3A7Cn0gbGlmbzsKCmxpZm8gKmxpZm9faW5pdCh2b2lkKSB7CglsaWZvICpsID0gbWFsbG9jKHNpemVvZihsaWZvKSk7CglsLT50b3AgPSBOVUxMOwoJcmV0dXJuIGw7Cn0KCnZvaWQgbGlmb19wdXNoKGxpZm8gKmwsIGludCBudW0pIHsKCWVsICpuZXcgPSBtYWxsb2Moc2l6ZW9mKGVsKSk7CgluZXctPnZhbCA9IG51bTsKCW5ldy0+cHJldiA9IGwtPnRvcDsKCWwtPnRvcCA9IG5ldzsKfQoKaW50IGxpZm9fcG9wKGxpZm8gKmwpIHsKCWVsICp0b2ZyZWUgPSBsLT50b3A7CglpbnQgcmV0ID0gdG9mcmVlLT52YWw7CglsLT50b3AgPSB0b2ZyZWUtPnByZXY7CglmcmVlKHRvZnJlZSk7CglyZXR1cm4gcmV0Owp9Cgp2b2lkIGxpZm9fc2hvdyhjb25zdCBsaWZvICpsKSB7CgllbCAqbmV4dCA9IGwtPnRvcDsKCXdoaWxlKG5leHQpIHsKCQlwcmludGYoIiVkXG4iLG5leHQtPnZhbCk7CgkJbmV4dCA9IG5leHQtPnByZXY7Cgl9Cn0KCnZvaWQgbGlmb19jbGVhbihsaWZvICpsKSB7CgllbCAqbmV4dCwgKnRvZnJlZSA9IGwtPnRvcDsKCXdoaWxlKHRvZnJlZSkgewoJCW5leHQgPSB0b2ZyZWUtPnByZXY7CgkJZnJlZSh0b2ZyZWUpOwoJCXRvZnJlZSA9IG5leHQ7Cgl9CglsLT50b3AgPSBOVUxMOwp9Cgp2b2lkIGxpZm9fZnJlZShsaWZvICpsKSB7CglpZighbCkgcmV0dXJuOwoJbGlmb19jbGVhbihsKTsKCWZyZWUobCk7Cn0KCiNkZWZpbmUgSURFT05FCmludCB1c2VyaW5wdXQodm9pZCkgewojaWZuZGVmIElERU9ORQoJcHJpbnRmKCJbMV0gRG9kYWogZWxlbWVudFxuIik7CglwcmludGYoIlsyXSBaZGVqbWlqIGVsZW1lbnRcbiIpOwoJcHJpbnRmKCJbM10gV3lzd2lldGwgc3Rvc1xuIik7CglwcmludGYoIls0XSBXeWN6eXNjIHN0b3NcbiIpOwoJcHJpbnRmKCJbNV0gVXN1biBzdG9zXG4iKTsKCXByaW50ZigiWzBdIFd5asWbY2llIHogcHJvZ3JhbXVcbiIpOwojZW5kaWYgSURFT05FCglpbnQgaW5wdXQ7CglzY2FuZigiJWQiLCZpbnB1dCk7CglyZXR1cm4gaW5wdXQ7Cn0KCmludCBtYWluKHZvaWQpIHsKCWxpZm8gKmwgPSBsaWZvX2luaXQoKTsKCWludCBjaG9pY2UgPSAtMTsKCXdoaWxlKChjaG9pY2UgPSB1c2VyaW5wdXQoKSkpIHsKCQlzd2l0Y2goY2hvaWNlKSB7CgkJaW50IG51bTsKCQljYXNlIDE6CgkJCXNjYW5mKCIlZCIsJm51bSk7CgkJCWxpZm9fcHVzaChsLG51bSk7CgkJCWJyZWFrOwoJCWNhc2UgMjoKCQkJcHJpbnRmKCJaZGpldG86ICVkXG4iLGxpZm9fcG9wKGwpKTsKCQkJYnJlYWs7CgkJY2FzZSAzOgoJCQlsaWZvX3Nob3cobCk7CgkJCWJyZWFrOwoJCWNhc2UgNDoKCQkJbGlmb19jbGVhbihsKTsKCQkJYnJlYWs7CgkJY2FzZSA1OgoJCQlsaWZvX2ZyZWUobCk7CgkJCWwgPSBOVUxMOwkvKiBiZXogd2lzemFjeWNoIHdza2F6bmlrb3cgKi8KCQkJYnJlYWs7CgkJfQoJfQoJLyogendhbG5hbmllIHBhbWllY2kgKi8KCWxpZm9fZnJlZShsKTsKCXJldHVybiAwOwp9Cg==