From 8081cf39510e6aabef07a168c77dca40dfb6674d Mon Sep 17 00:00:00 2001 From: Johannes Randerath Date: Wed, 15 May 2024 14:49:46 +0200 Subject: [PATCH] Queue --- queue.c | 81 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 81 insertions(+) create mode 100644 queue.c diff --git a/queue.c b/queue.c new file mode 100644 index 0000000..b9d5893 --- /dev/null +++ b/queue.c @@ -0,0 +1,81 @@ +#include +#include +#include +#include + +typedef struct node { + void *content; + struct node *next; +}Node; + +typedef struct queue { + Node *first; + Node *last; + size_t w; +}Queue; + +Queue *new_queue(size_t w) { + Queue *q = malloc(sizeof(Queue)); + q->first = NULL; + q->last = NULL; + q->w = w; + return q; +} + +bool is_empty(Queue *q) { + return !q->first; +} + +void enqueue(void *content, Queue *q) { + Node *n = malloc(sizeof(Node)); + n->content = content; + n->next = NULL; + if (is_empty(q)) + q->first = n; + else + q->last->next = n; + q->last = n; +} + +void *dequeue(Queue *q) { + if (is_empty(q)) + return NULL; + void *r = q->first->content; + Node *n = q->first; + q->first = q->first->next; + free(n); + if (is_empty(q)) + q->last = NULL; + return r; +} + +void destroy(Queue *q) { + while (!is_empty(q)) { + free(dequeue(q)); + } + free(q); +} + +int main() { + Queue *q = new_queue(sizeof(int)); + int *a = malloc(sizeof(int)); + int *b = malloc(sizeof(int)); + int *c = malloc(sizeof(int)); + int *d = malloc(sizeof(int)); + *a=1; + *b=2; + *c=3; + *d=-1; + enqueue(a, q); + printf("%d\n", *((int*)dequeue(q))); + enqueue(b, q); + enqueue(c, q); + enqueue(d, q); + while(!is_empty(q)) { + printf("%d\n", *((int*)dequeue(q))); + } + destroy(q); + return 0; + +} +