From 154874afda4a8df885e51c01f7681f04fb0b8e61 Mon Sep 17 00:00:00 2001 From: Thomas Schmucker Date: Sat, 9 Apr 2022 09:43:53 +0200 Subject: neue Verzeichnisstruktur --- list-tail-node.c | 197 ------------------------------------------------------- 1 file changed, 197 deletions(-) delete mode 100644 list-tail-node.c (limited to 'list-tail-node.c') diff --git a/list-tail-node.c b/list-tail-node.c deleted file mode 100644 index edfcf31..0000000 --- a/list-tail-node.c +++ /dev/null @@ -1,197 +0,0 @@ -/* Standard C */ -#include -#include -#include - -/* Project */ -#include "util.h" - -/* --8<-- list_tail_type */ -typedef int T; - -struct list_node { - struct list_node *next; - T data; -}; - -struct list { - struct list_node *head, *tail; -}; -/* -->8-- */ - -/* --8<-- list_tail_init */ -void -list_init(struct list *list) -{ - list->head = NULL; -} -/* -->8-- */ - -/* --8<-- list_tail_create_node */ -static struct list_node * -create_node(struct list_node *next, T data) -{ - struct list_node *node = malloc(sizeof *node); - - if ( node ) { - node->next = next; - node->data = data; - } - return node; -} -/* -->8-- */ - -/* --8<-- list_tail_push_back */ -void -list_push_back(struct list *list, T data) -{ - struct list_node *node = create_node(NULL, data); - - if ( node ) { - if ( list->head == NULL ) { - list->head = node; - } - else { - list->tail->next = node; - } - list->tail = node; - } - else { - ERROR("out of memory"); - } -} -/* -->8-- */ - -/* --8<-- list_tail_front */ -void -list_push_front(struct list *list, T data) -{ - struct list_node *node = create_node(list->head, data); - - if ( node ) { - if ( list->head == NULL ) { // Einfügen in eine leere Liste? - list->tail = node; - } - list->head = node; - } - else { - ERROR("out of memory"); - } -} -/* -->8-- */ - -/* --8<-- list_tail_pop_front */ -bool -list_pop_front(struct list *list, T *data) -{ - if ( list->head ) { - struct list_node *next = list->head->next; - - if ( data ) { - *data = list->head->data; - } - free(list->head); - list->head = next; - - return true; - } - else { - return false; - } -} -/* -->8-- */ - -/* --8<-- list_tail_insert_next */ -void -list_insert_next(struct list *list, struct list_node *node, T data) -{ - if ( node == NULL ) { // Am Anfang einfügen - list_push_front(list, data); - } - else { - struct list_node *new_node = create_node(node->next, data); - - if ( new_node ) { - if ( node->next == NULL ) { // Am Ende einfügen - list->tail = new_node; - } - node->next = new_node; - } - else { - ERROR("out of memory"); - } - } -} -/* -->8-- */ - -/* --8<-- list_tail_delete_next */ -void -list_delete_next(struct list *list, struct list_node *node, T *data) -{ - if ( node == NULL ) { // Am Anfang entfernen - list_pop_front(list, data); - } - else { - if ( node->next ) { - struct list_node *old_node = node->next; - node->next = node->next->next; - - if ( node->next == NULL ) { - list->tail = node; - } - - if ( data ) { - *data = old_node->data; - } - free(old_node); - } - } -} -/* -->8-- */ - -/* --8<-- list_tail_empty */ -bool -list_empty(struct list *list) -{ - return list->head == NULL; -} -/* -->8-- */ - -/* --8<-- list_tail_free */ -void -list_free(struct list *list) -{ - struct list_node *item, *next; - - for ( item = list->head; item; item = next ) { - next = item->next; - free(item); - } -} -/* -->8-- */ - -int -main() -{ - struct list list[1]; - - list_init(list); - - for ( int i = 0; i != 10; ++i ) - list_push_front(list, -i); - - for ( int i = 0; i != 10; ++i ) - list_push_back(list, i); - - while ( !list_empty(list) ) { - int i; - if ( list_pop_front(list, &i) ) - printf("%d\n", i); - else - ERROR("this shouldn't happen!"); - } - - list_free(list); - - return EXIT_SUCCESS; -} -- cgit v1.3