#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct NodeFifo
{
char *value;
struct NodeFifo *next;
};
struct Fifo
{
struct NodeFifo *head,*tail;
};
struct Fifo init()
{
struct Fifo f={NULL,NULL};
return f;
}
struct NodeFifo *newNode(const char *value,struct NodeFifo *next)
{
struct NodeFifo *add;
add
=(struct NodeFifo
*)malloc(sizeof(struct NodeFifo
)); add->value=strdup(value);
add->next=next;
return add;
}
void addValue(struct Fifo *f,const char *value)
{
struct NodeFifo *add;
add=newNode(value,NULL);
if(f->tail) f->tail->next=add;
else f->head=add;
f->tail=add;
}
void pushValue(struct Fifo *f,const char *value)
{
f->head=newNode(value,f->head);
if(!f->tail) f->tail=f->head;
}
void print(struct Fifo *f)
{
struct NodeFifo *i;
for(i=f->head;i;i=i->next)
{
}
}
const char *head(struct Fifo *f)
{
return f->head?f->head->value:NULL;
}
const char *tail(struct Fifo *f)
{
return f->tail?f->tail->value:NULL;
}
void popValue(struct Fifo *f)
{
struct NodeFifo *tmp;
if(f->head)
{
tmp=f->head;
f->head=tmp->next;
if(!f->head) f->tail=NULL;
}
}
void reverse(struct Fifo *f)
{
struct NodeFifo *tmp,*next;
tmp=f->head;
f->head=f->tail=NULL;
while(tmp)
{
next=tmp->next;
tmp->next=f->head;
f->head=tmp;
if(!f->tail) f->tail=tmp;
tmp=next;
}
}
void deinit(struct Fifo *f)
{
while(f->head)
{
f->tail=f->head;
f->head=f->head->next;
}
f->tail=NULL;
}
int main()
{
struct Fifo f=init();
addValue(&f,"jeden");
addValue(&f,"dwa");
addValue(&f,"trzy");
addValue(&f,"cztery");
print(&f);
reverse(&f);
print(&f);
reverse(&f);
print(&f);
printf("%s\n",head
(&f
)); popValue
(&f
); print(&f);
printf("%s\n",head
(&f
)); popValue
(&f
); print(&f);
deinit(&f);
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KI2luY2x1ZGUgPHN0cmluZy5oPgoKc3RydWN0IE5vZGVGaWZvCiAgewogICBjaGFyICp2YWx1ZTsKICAgc3RydWN0IE5vZGVGaWZvICpuZXh0OwogIH07CgpzdHJ1Y3QgRmlmbwogIHsKICAgc3RydWN0IE5vZGVGaWZvICpoZWFkLCp0YWlsOwogIH07CgpzdHJ1Y3QgRmlmbyBpbml0KCkKICB7CiAgIHN0cnVjdCBGaWZvIGY9e05VTEwsTlVMTH07CiAgIHJldHVybiBmOyAKICB9CgpzdHJ1Y3QgTm9kZUZpZm8gKm5ld05vZGUoY29uc3QgY2hhciAqdmFsdWUsc3RydWN0IE5vZGVGaWZvICpuZXh0KQogIHsKICAgc3RydWN0IE5vZGVGaWZvICphZGQ7CiAgIGFkZD0oc3RydWN0IE5vZGVGaWZvKiltYWxsb2Moc2l6ZW9mKHN0cnVjdCBOb2RlRmlmbykpOwogICBhZGQtPnZhbHVlPXN0cmR1cCh2YWx1ZSk7CiAgIGFkZC0+bmV4dD1uZXh0OwogICByZXR1cm4gYWRkOwogIH0KCnZvaWQgYWRkVmFsdWUoc3RydWN0IEZpZm8gKmYsY29uc3QgY2hhciAqdmFsdWUpCiAgewogICBzdHJ1Y3QgTm9kZUZpZm8gKmFkZDsKICAgYWRkPW5ld05vZGUodmFsdWUsTlVMTCk7CiAgIGlmKGYtPnRhaWwpIGYtPnRhaWwtPm5leHQ9YWRkOwogICBlbHNlIGYtPmhlYWQ9YWRkOwogICBmLT50YWlsPWFkZDsKICB9Cgp2b2lkIHB1c2hWYWx1ZShzdHJ1Y3QgRmlmbyAqZixjb25zdCBjaGFyICp2YWx1ZSkKICB7CiAgIGYtPmhlYWQ9bmV3Tm9kZSh2YWx1ZSxmLT5oZWFkKTsKICAgaWYoIWYtPnRhaWwpIGYtPnRhaWw9Zi0+aGVhZDsKICB9Cgp2b2lkIHByaW50KHN0cnVjdCBGaWZvICpmKQogIHsKICAgc3RydWN0IE5vZGVGaWZvICppOwogICBwcmludGYoIlsiKTsKICAgZm9yKGk9Zi0+aGVhZDtpO2k9aS0+bmV4dCkKICAgICB7CiAgICAgIGlmKGkhPWYtPmhlYWQpIHByaW50ZigiLCAiKTsKICAgICAgcHJpbnRmKCIlcyIsaS0+dmFsdWUpOwogICAgIH0KICAgcHJpbnRmKCIgXVxuIik7CiAgfQoKY29uc3QgY2hhciAqaGVhZChzdHJ1Y3QgRmlmbyAqZikKICB7CiAgIHJldHVybiBmLT5oZWFkP2YtPmhlYWQtPnZhbHVlOk5VTEw7CiAgfQoKY29uc3QgY2hhciAqdGFpbChzdHJ1Y3QgRmlmbyAqZikKICB7CiAgIHJldHVybiBmLT50YWlsP2YtPnRhaWwtPnZhbHVlOk5VTEw7CiAgfQoKdm9pZCBwb3BWYWx1ZShzdHJ1Y3QgRmlmbyAqZikKICB7CiAgIHN0cnVjdCBOb2RlRmlmbyAqdG1wOwogICBpZihmLT5oZWFkKQogICAgIHsKICAgICAgdG1wPWYtPmhlYWQ7CiAgICAgIGYtPmhlYWQ9dG1wLT5uZXh0OwogICAgICBpZighZi0+aGVhZCkgZi0+dGFpbD1OVUxMOwogICAgICBmcmVlKHRtcC0+dmFsdWUpOwogICAgICBmcmVlKHRtcCk7CiAgICAgfQogIH0KCQoKdm9pZCByZXZlcnNlKHN0cnVjdCBGaWZvICpmKQogIHsKICAgc3RydWN0IE5vZGVGaWZvICp0bXAsKm5leHQ7CiAgIHRtcD1mLT5oZWFkOwogICBmLT5oZWFkPWYtPnRhaWw9TlVMTDsKICAgd2hpbGUodG1wKQogICAgIHsKICAgICAgbmV4dD10bXAtPm5leHQ7CiAgICAgIHRtcC0+bmV4dD1mLT5oZWFkOwogICAgICBmLT5oZWFkPXRtcDsKICAgICAgaWYoIWYtPnRhaWwpIGYtPnRhaWw9dG1wOwogICAgICB0bXA9bmV4dDsKICAgICB9CiAgfQoKdm9pZCBkZWluaXQoc3RydWN0IEZpZm8gKmYpCiAgewogICB3aGlsZShmLT5oZWFkKQogICAgIHsKICAgICAgZi0+dGFpbD1mLT5oZWFkOwogICAgICBmLT5oZWFkPWYtPmhlYWQtPm5leHQ7CiAgICAgIGZyZWUoZi0+dGFpbC0+dmFsdWUpOwogICAgICBmcmVlKGYtPnRhaWwpOwogICAgIH0KICAgZi0+dGFpbD1OVUxMOwogIH0KCmludCBtYWluKCkKICB7CiAgIHN0cnVjdCBGaWZvIGY9aW5pdCgpOwoKICAgYWRkVmFsdWUoJmYsImplZGVuIik7CiAgIGFkZFZhbHVlKCZmLCJkd2EiKTsKICAgYWRkVmFsdWUoJmYsInRyenkiKTsKICAgYWRkVmFsdWUoJmYsImN6dGVyeSIpOwoKICAgcHJpbnQoJmYpOwogICByZXZlcnNlKCZmKTsKICAgcHJpbnQoJmYpOwogICByZXZlcnNlKCZmKTsKICAgcHJpbnQoJmYpOwoKICAgcHJpbnRmKCIlc1xuIixoZWFkKCZmKSk7IHBvcFZhbHVlKCZmKTsKICAgcHJpbnQoJmYpOwogICBwcmludGYoIiVzXG4iLGhlYWQoJmYpKTsgcG9wVmFsdWUoJmYpOwogICBwcmludCgmZik7CgogICBkZWluaXQoJmYpOwogICByZXR1cm4gMDsKICB9
[jeden, dwa, trzy, cztery ]
[cztery, trzy, dwa, jeden ]
[jeden, dwa, trzy, cztery ]
jeden
[dwa, trzy, cztery ]
dwa
[trzy, cztery ]