From 5a2665c21b511ef90967af053f6a1d504b78afff Mon Sep 17 00:00:00 2001 From: Maksymilian Jopek Date: Sun, 26 Mar 2023 15:53:00 +0200 Subject: Stack, queue and graph data structures implemented in C using linked lists. --- src/queue.c | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 src/queue.c (limited to 'src/queue.c') diff --git a/src/queue.c b/src/queue.c new file mode 100644 index 0000000..1d7a170 --- /dev/null +++ b/src/queue.c @@ -0,0 +1,48 @@ +#include "queue.h" +#include +#include + +Queue *queueAlloc() { + Queue *new = malloc(sizeof(Queue)); + new->first = NULL; + new->last = NULL; + return new; +} + +void queueAdd(Queue *queue, int item) { + struct queueItem *new = malloc(sizeof(struct queueItem)); + new->item = item; + if (queue->first) { + new->next = queue->last; + new->previous = NULL; + queue->last->previous = new; + queue->last = new; + } else { + new->next = NULL; + new->previous = NULL; + queue->first = new; + queue->last = new; + } +} + +int queuePop(Queue *queue) { + if (!queue->first) { + return -1; + } + int out = queue->first->item; + queue->first = queue->first->previous; + return out; +} + +void queueFree(Queue *queue) { + struct queueItem *qi = queue->last; + struct queueItem *t = NULL; + while (qi) { + // printf("Address:"); + // printf("%p\n", (void *)qi); + t = qi->next; + free(qi); + qi = t; + } + free(queue); +} -- cgit v1.3.1