From ac55496d881e0a17b3eff85f1faae5aafbc53b50 Mon Sep 17 00:00:00 2001 From: Thomas Schmucker Date: Wed, 22 Jul 2020 17:30:45 +0200 Subject: erster Commit --- queue.c | 86 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 86 insertions(+) create mode 100644 queue.c (limited to 'queue.c') diff --git a/queue.c b/queue.c new file mode 100644 index 0000000..fdacca5 --- /dev/null +++ b/queue.c @@ -0,0 +1,86 @@ +/* Standard C */ +#include +#include +#include + +/* Project */ +#include "util.h" + +typedef int T; + +struct queue_item { + struct queue_item *next; + T data; +}; + +struct queue { + struct queue_item *head, *tail; +}; + +void +queue_init(struct queue *queue) +{ + queue->head = NULL; +} + +void +queue_put(struct queue *queue, T data) +{ + struct queue_item *new_item; + + if ( (new_item = malloc(sizeof(*new_item))) != NULL ) { + struct queue_item *tmp = queue->tail; + new_item->data = data; + queue->tail = new_item; + if ( queue->head == NULL ) + queue->head = queue->tail; + else + tmp->next = queue->tail; + } + else + ERROR("out of memory"); +} + +bool +queue_get(struct queue *queue, T *data) +{ + if ( queue->head != NULL ) { + struct queue_item *next = queue->head->next; + *data = queue->head->data; + free(queue->head); + queue->head = next; + + return true; + } + else + return false; +} + +bool +queue_empty(struct queue *queue) +{ + return queue->head == NULL; +} + +int +main() +{ + struct queue queue[1]; + + queue_init(queue); + + for ( int i = 0; i != 10; ++i ) + queue_put(queue, i); + + while ( !queue_empty(queue) ) { + int i; + if ( queue_get(queue, &i) ) + printf("%d\n", i); + else + ERROR("this shouldn't happen!"); + } + return EXIT_SUCCESS; +} + + + -- cgit v1.3