C言語のプログラミングの授業でqueueを実装しろという課題が出されました。そこで以下のようなプログラムを組みました。
#include <stdio.h> #define SIZE 5 int head = 1; int tail = 1; double queue[SIZE]={0}; void enqueue(double z) { if ((tail%SIZE+1) == head%SIZE) printf("データがいっぱいです\n"); else if (tail%SIZE+1 != head%SIZE) { queue[tail-1 % SIZE] = z; tail++; } } double dequeue(void) { int i,k = queue[0]; if ((head % SIZE) != (tail % SIZE)) { for (i = 1; i <= tail; i++) { queue[i-1] = queue; queue = 0; } tail--; } else printf("データがありません\n"); return k; } void print(void) { int j; printf("queue[/url] = |"); for(j = 0; j < SIZE-1; j++) { printf("%2.1f | ", queue[j]); } printf("\n"); } int main() { enqueue(100); print(); enqueue(30); print(); enqueue(50); print(); enqueue(40); print(); enqueue(60); print(); enqueue(6); print(); enqueue(60); print(); enqueue(7); print(); dequeue(); print(); dequeue(); print(); dequeue(); print(); dequeue(); print(); dequeue(); print(); dequeue(); print(); return 0; }
これを実行すると
queue[/url] = |100.0 | 0.0 | 0.0 | 0.0 |
queue[/url] = |100.0 | 30.0 | 0.0 | 0.0 |
queue[/url] = |100.0 | 30.0 | 50.0 | 0.0 |
queue[/url] = |100.0 | 30.0 | 50.0 | 40.0 |
データがいっぱいです
queue[/url] = |100.0 | 30.0 | 50.0 | 40.0 |
データがいっぱいです
queue[/url] = |100.0 | 30.0 | 50.0 | 40.0 |
データがいっぱいです
queue[/url] = |100.0 | 30.0 | 50.0 | 40.0 |
データがいっぱいです
queue[/url] = |100.0 | 30.0 | 50.0 | 40.0 |
queue[/url] = |30.0 | 50.0 | 40.0 | 0.0 |
queue[/url] = |50.0 | 40.0 | 0.0 | 0.0 |
queue[/url] = |40.0 | 0.0 | 0.0 | 0.0 |
queue[/url] = |0.0 | 0.0 | 0.0 | 0.0 |
データがありません
queue[/url] = |0.0 | 0.0 | 0.0 | 0.0 |
データがありません
queue[/url] = |0.0 | 0.0 | 0.0 | 0.0 |
と表示されるのですが、これに対して教員から「deqで戻値を使ってデータを取り出しているか?」という返答があり、受理されませんでした。dequeue関数でqueue[0]であるkを戻値として返しているので条件は満たしていると思うのですがどこがいけないのでしょうか。
UNIXを使用しており、Cに関しては基礎部分だけでありポインタは未学習であり、使用可能なライブラリは標準ライブラリのみとなっております。
どうかよろしくお願いします。