diff options
| author | Maksymilian Jopek <maks@jopek.eu> | 2023-03-26 15:53:00 +0200 |
|---|---|---|
| committer | Maksymilian Jopek <maks@jopek.eu> | 2023-03-26 17:37:35 +0200 |
| commit | 5a2665c21b511ef90967af053f6a1d504b78afff (patch) | |
| tree | 12b6727b0f1742132063eed1927b98c81f7352b1 /src/queue.c | |
| download | cstructures-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.c | 48 |
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); +} |
