82 lines
1.4 KiB
C
82 lines
1.4 KiB
C
#include <stdlib.h>
|
|
#include <ctype.h>
|
|
#include <stdbool.h>
|
|
#include <stdio.h>
|
|
|
|
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;
|
|
|
|
}
|
|
|