#include #include #include #include typedef struct node { void *content; struct node *next; }Node; typedef struct queue { Node *first; Node *last; size_t w; }Queue; Queue *new_queue(size_t w) { Queue *q = malloc(sizeof(Queue)); q->first = NULL; q->last = NULL; q->w = w; return q; } bool is_empty(Queue *q) { return !q->first; } void enqueue(void *content, Queue *q) { Node *n = malloc(sizeof(Node)); n->content = content; n->next = NULL; if (is_empty(q)) q->first = n; else q->last->next = n; q->last = n; } void *dequeue(Queue *q) { if (is_empty(q)) return NULL; void *r = q->first->content; Node *n = q->first; q->first = q->first->next; free(n); if (is_empty(q)) q->last = NULL; return r; } void destroy(Queue *q) { while (!is_empty(q)) { free(dequeue(q)); } free(q); } int main() { Queue *q = new_queue(sizeof(int)); int *a = malloc(sizeof(int)); int *b = malloc(sizeof(int)); int *c = malloc(sizeof(int)); int *d = malloc(sizeof(int)); *a=1; *b=2; *c=3; *d=-1; enqueue(a, q); printf("%d\n", *((int*)dequeue(q))); enqueue(b, q); enqueue(c, q); enqueue(d, q); while(!is_empty(q)) { printf("%d\n", *((int*)dequeue(q))); } destroy(q); return 0; }