#include "queue.h" void enqueue(Node **head, Node **tail, int value) { Node *new_node = (Node*)malloc(sizeof(Node)); if ( ! new_node ) { fprintf(stderr,"Error: Out of memory"); return; } new_node->value = value; new_node->next = NULL; // Case 1: queue is empty if ( is_empty(*head) ) { *head = new_node; } // Case 2: queue is not empty else { (*tail)->next = new_node; } *tail = new_node; } // Pre-condition: queue cannot be empty int dequeue(Node **head, Node **tail) { Node *removed = *head; *head = (*head)->next; if ( !(*head) ) { *tail = NULL; } int value = removed->value; free(removed); return value; } bool is_empty(Node *head) { return (head == NULL); } void print(Node *head) { Node *current = head; while ( current ) { printf("%d ", current->value); current = current->next; } printf("\n"); }