#include #include "cqueue.h" typedef struct { void **data; int capacity; int front; int size; } Queue; void *new_queue(int capacity) { Queue *new_q = (Queue *)malloc(sizeof(Queue)); new_q->data = (void **)malloc(sizeof(void *) * capacity); new_q->capacity = capacity; new_q->front = 0; new_q->size = 0; } void free_queue(void *queue) { Queue *q = (Queue *)queue; free(q->data); free(q); } void queue_enqueue(void *queue, void *value) { Queue *q = (Queue *)queue; int back; if (!queue_full(queue)) { back = (q->front + q->size) % q->capacity; q->data[back] = value; q->size++; } } void *queue_dequeue(void *queue) { Queue *q = (Queue *)queue; int old_front = q->front; if (queue_empty(queue)) return NULL; q->size--; q->front = (q->front + 1) % q->capacity; return q->data[old_front]; } void *queue_peek(void *queue) { Queue *q = (Queue *)queue; if (queue_empty(queue)) return NULL; return q->data[q->front]; } int queue_empty(void *queue) { Queue *q = (Queue *)queue; return (q->size == 0); } int queue_full(void *queue) { Queue *q = (Queue *)queue; return (q->size == q->capacity); } int queue_size(void *queue) { Queue *q = (Queue *)queue; return q->size; }