キュー再実装
http://d.hatena.ne.jp/pknight/20090704/1246706552
ちゃんとループするように再実装してみました。
#include <stdio.h> typedef struct { int data[100]; int end; int start; } queue; void enqueue (queue *q,int data) { if ( (q->end + 1) % 10 == q->start ) { return; } q->data[q->end] = data; q->end = (q->end + 1) % 10; } int dequeue (queue *q) { int ret; if ( q->start == q->end ) { return -1; } ret = q->data[q->start]; q->start = (q->start + 1) % 10; return ret; } int main (void) { queue q; q.start = 0; q.end = 0; enqueue(&q,100); enqueue(&q,200); enqueue(&q,300); enqueue(&q,400); enqueue(&q,500); enqueue(&q,600); enqueue(&q,700); enqueue(&q,800); enqueue(&q,900); enqueue(&q,9999); printf("%d\n", dequeue(&q) ); enqueue(&q,1000); printf("%d\n", dequeue(&q) ); printf("%d\n", dequeue(&q) ); printf("%d\n", dequeue(&q) ); printf("%d\n", dequeue(&q) ); printf("%d\n", dequeue(&q) ); printf("%d\n", dequeue(&q) ); printf("%d\n", dequeue(&q) ); printf("%d\n", dequeue(&q) ); printf("%d\n", dequeue(&q) ); printf("%d\n", dequeue(&q) ); return 0; }
$ main 100 200 300 400 500 600 700 800 900 1000 -1
キューがいっぱいの時の扱いをどうするかの課題はありますが、うまく動いています。