#include <stdio.h>
/** \brief Ein Listenelement einer einfach verketetten Liste. */
struct list_element {
struct list_element *next; /*!< Zeigen auf den Nachfolger in der Liste */
int value; /*!< Der Wert der in einem Listenelement gespeichert wird. In diesem Beispiel ein int.*/
};
/** \brief Ein Listenkopf zu verwalten einer einfach verketetten Liste. */
struct list_head {
struct list_element *front; /*!< Zeiger auf das erste Element der Liste. */
struct list_element *end; /*!< Zeiger auf das letzte Element der Liste. */
};
struct list_head* list_new() {
return malloc(sizeof(struct list_head
)); }
struct list_element* list_push(struct list_head* head) {
//List head is null
if(!head) {
return NULL;
}
//Initialize list element
struct list_element
* elm
= malloc(sizeof(struct list_element
));
if(elm == NULL) {
//Couldn't alloc memory
return NULL;
}
if(!(head->front)) {
head->front = elm;
head->end = elm;
} else {
//List head is not null, set next elm to point to current elm
elm -> next = head -> front;
head->front = elm;
}
return elm;
}
int print_list(struct list_head* head) {
if(head == NULL || head->front == NULL) {
return 0;
}
struct list_element *elm = head-> front;
int numberOfElements = 0;
while(elm) {
elm = elm -> next;
numberOfElements++;
}
return numberOfElements;
}
int main(void) {
struct list_head listHead = *list_new();
//First item
struct list_element *element1 = list_push(&listHead);
element1 -> value = 20;
//Second item
struct list_element *element2 = list_push(&listHead);
element2 -> value = 10;
//List is now 10 20
print_list(&listHead);
}
I2luY2x1ZGUgPHN0ZGlvLmg+CgovKiogXGJyaWVmIEVpbiBMaXN0ZW5lbGVtZW50IGVpbmVyIGVpbmZhY2ggdmVya2V0ZXR0ZW4gTGlzdGUuICovCnN0cnVjdCBsaXN0X2VsZW1lbnQgewogIHN0cnVjdCBsaXN0X2VsZW1lbnQgKm5leHQ7CS8qITwgWmVpZ2VuIGF1ZiBkZW4gTmFjaGZvbGdlciBpbiBkZXIgTGlzdGUgKi8KICBpbnQgdmFsdWU7CQkJLyohPCBEZXIgV2VydCBkZXIgaW4gZWluZW0gTGlzdGVuZWxlbWVudCBnZXNwZWljaGVydCB3aXJkLiBJbiBkaWVzZW0gQmVpc3BpZWwgZWluIGludC4qLwp9OwoKLyoqIFxicmllZiBFaW4gTGlzdGVua29wZiB6dSB2ZXJ3YWx0ZW4gZWluZXIgZWluZmFjaCB2ZXJrZXRldHRlbiBMaXN0ZS4gKi8Kc3RydWN0IGxpc3RfaGVhZCB7CiAgc3RydWN0IGxpc3RfZWxlbWVudCAqZnJvbnQ7CS8qITwgWmVpZ2VyIGF1ZiBkYXMgZXJzdGUgRWxlbWVudCBkZXIgTGlzdGUuICovCiAgc3RydWN0IGxpc3RfZWxlbWVudCAqZW5kOwkvKiE8IFplaWdlciBhdWYgZGFzIGxldHp0ZSBFbGVtZW50IGRlciBMaXN0ZS4gKi8KfTsKCgoKc3RydWN0IGxpc3RfaGVhZCogbGlzdF9uZXcoKSB7CiAgICByZXR1cm4gbWFsbG9jKHNpemVvZihzdHJ1Y3QgbGlzdF9oZWFkKSk7Cn0KCnN0cnVjdCBsaXN0X2VsZW1lbnQqIGxpc3RfcHVzaChzdHJ1Y3QgbGlzdF9oZWFkKiBoZWFkKSB7CiAgICAKICAgIC8vTGlzdCBoZWFkIGlzIG51bGwKICAgIGlmKCFoZWFkKSB7CiAgICAgICAgcmV0dXJuIE5VTEw7CiAgICB9CiAgICAKICAgIC8vSW5pdGlhbGl6ZSBsaXN0IGVsZW1lbnQKICAgIAogICAgc3RydWN0IGxpc3RfZWxlbWVudCogZWxtID0gbWFsbG9jKHNpemVvZihzdHJ1Y3QgbGlzdF9lbGVtZW50KSk7CiAgICAKICAgIGlmKGVsbSA9PSBOVUxMKSB7CiAgICAgICAgLy9Db3VsZG4ndCBhbGxvYyBtZW1vcnkKICAgICAgICByZXR1cm4gTlVMTDsKICAgIH0KICAgIAogICAgaWYoIShoZWFkLT5mcm9udCkpIHsKICAgICAgICBoZWFkLT5mcm9udCA9IGVsbTsKICAgICAgICBoZWFkLT5lbmQgPSBlbG07CiAgICB9IGVsc2UgewogICAgICAgIC8vTGlzdCBoZWFkIGlzIG5vdCBudWxsLCBzZXQgbmV4dCBlbG0gdG8gcG9pbnQgdG8gY3VycmVudCBlbG0KICAgICAgICBlbG0gLT4gbmV4dCA9IGhlYWQgLT4gZnJvbnQ7CiAgICAgICAgaGVhZC0+ZnJvbnQgPSBlbG07CgogICAgfQogICAgCiAgICByZXR1cm4gZWxtOwp9CgppbnQgcHJpbnRfbGlzdChzdHJ1Y3QgbGlzdF9oZWFkKiBoZWFkKSB7CiAgICBwcmludGYoIkxpc3RlOiAiKTsKICAgIGlmKGhlYWQgPT0gTlVMTCB8fCBoZWFkLT5mcm9udCA9PSBOVUxMKSB7CiAgICAgICAgcHJpbnRmKCJpc3QgbGVlciBcbiIpOwogICAgICAgIHJldHVybiAwOwogICAgfQogICAgCiAgICBzdHJ1Y3QgbGlzdF9lbGVtZW50ICplbG0gPSBoZWFkLT4gZnJvbnQ7CiAgICBpbnQgbnVtYmVyT2ZFbGVtZW50cyA9IDA7CiAgICAKICAgIHdoaWxlKGVsbSkgewogICAgICAgIHByaW50ZigiJWkiLCBlbG0gLT4gdmFsdWUpOwogICAgICAgIHByaW50ZigiICIpOwogICAgICAgIGVsbSA9IGVsbSAtPiBuZXh0OwogICAgICAgIG51bWJlck9mRWxlbWVudHMrKzsKICAgIH0KICAgIHByaW50ZigiXG4iKTsKICAgIHJldHVybiBudW1iZXJPZkVsZW1lbnRzOwp9CgoKCmludCBtYWluKHZvaWQpIHsKCXN0cnVjdCBsaXN0X2hlYWQgbGlzdEhlYWQgPSAqbGlzdF9uZXcoKTsKCQoJLy9GaXJzdCBpdGVtCgkgIHN0cnVjdCBsaXN0X2VsZW1lbnQgKmVsZW1lbnQxID0gbGlzdF9wdXNoKCZsaXN0SGVhZCk7CiAgICBlbGVtZW50MSAtPiB2YWx1ZSA9IDIwOwogICAgCiAgICAvL1NlY29uZCBpdGVtCiAgICAgIHN0cnVjdCBsaXN0X2VsZW1lbnQgKmVsZW1lbnQyID0gbGlzdF9wdXNoKCZsaXN0SGVhZCk7CiAgICBlbGVtZW50MiAtPiB2YWx1ZSA9IDEwOwogICAgCiAgICAvL0xpc3QgaXMgbm93IDEwIDIwCiAgIAogICAgcHJpbnRfbGlzdCgmbGlzdEhlYWQpOwoKfQo=