aboutsummaryrefslogtreecommitdiffstats
path: root/src/queue.c
diff options
context:
space:
mode:
authorMaksymilian Jopek <maks@jopek.eu>2023-03-26 15:53:00 +0200
committerMaksymilian Jopek <maks@jopek.eu>2023-03-26 17:37:35 +0200
commit5a2665c21b511ef90967af053f6a1d504b78afff (patch)
tree12b6727b0f1742132063eed1927b98c81f7352b1 /src/queue.c
downloadcstructures-5a2665c21b511ef90967af053f6a1d504b78afff.tar.gz
cstructures-5a2665c21b511ef90967af053f6a1d504b78afff.tar.zst
cstructures-5a2665c21b511ef90967af053f6a1d504b78afff.zip
Stack, queue and graph data structures implemented in C using linked lists.
Diffstat (limited to 'src/queue.c')
-rw-r--r--src/queue.c48
1 files changed, 48 insertions, 0 deletions
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 <stdio.h>
+#include <stdlib.h>
+
+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);
+}