キュを実装せむとす
言語は C11 とす.また,要素の型は int
に限定することとす.
#include <stdio.h>
#include <stdlib.h>
typedef struct q_node {
struct q_node *next;
int value;
} node;
typedef struct {
node *head;
node *tail;
} queue;
void enqueue(queue *q, int value) {
node *n = malloc(sizeof(queue));
n->value = value;
n->next = NULL;
if (q->head == NULL) {
q->head = n;
} else {
q->tail->next = n;
}
q->tail = n;
}
int dequeue(queue *q) {
if (q->head == NULL) return -1;
node *h = q->head;
q->head = h->next;
return h->value;
}
int is_empty(queue *q) {
return q->head == NULL;
}
queue *new_queue() {
return malloc(sizeof(queue));
}
int main() {
queue *q = new_queue();
for (int i = 0; i < 10; i++) enqueue(q, i);
while (!is_empty(q)) {
printf("%d\n", dequeue(q));
}
return 0;
}
int
型以外に対応せしむるには, value の型を変更すべし.また,今回 node
に於て値を宛ら包むが,ポインタで代用するを得.