// Queue.c #include #include #include "Queue.h" typedef struct node { Item item; struct node *next; } Node; struct queue { Node *head; // front of queue Node *tail; // end of queue int size; }; // Helper to create a new node static Node *newNode(Item it) { Node *n = malloc(sizeof(Node)); n->item = it; n->next = NULL; return n; } Queue QueueNew(void) { Queue q = malloc(sizeof(struct queue)); q->head = NULL; q->tail = NULL; q->size = 0; return q; } void QueueFree(Queue q) { Node *curr = q->head; while (curr != NULL) { Node *temp = curr; curr = curr->next; free(temp); } free(q); } void QueueEnqueue(Queue q, Item it) { Node *n = newNode(it); if (q->tail == NULL) { q->head = n; q->tail = n; } else { q->tail->next = n; q->tail = n; } q->size++; } Item QueueDequeue(Queue q) { Node *oldHead = q->head; Item it = oldHead->item; q->head = oldHead->next; if (q->head == NULL) { q->tail = NULL; } free(oldHead); q->size--; return it; } int QueueSize(Queue q) { return q->size; } Item QueuePeek(Queue q) { return q->head->item; }