キュを実装せむとす

言語は 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 に於て値を宛ら包むが,ポインタで代用するを得.