キュー再実装

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

キューがいっぱいの時の扱いをどうするかの課題はありますが、うまく動いています。