キューから順次取り出して表示するプログラムのつもりで書きました。
(教科書からちょいちょいソースぱくってます。)
例)
INPUT : 1 2 3 0
OUTPUT : 1 2 3
どうしても、数字の入出力場所が自分でかいときながら、どういう仕組みなのかいまいち理解できません。
とりあえず、大学でやってるようにwhileでループさせて、0きたら終了的なことをやっているのですが、
データを取り出すときに、現在位置をどこにあてれば綺麗にとりだせるのでしょうか?
とりあえずinitで初期化させてとりだそうとするのですが、やり方がまずいのか、errorに突っ込んでいきます。;;
#include<stdio.h>
#include<stdlib.h>
#include<ctype.h>
typedef int ELEM; /*待ち行列の要素の型*/
#define QUEUE_SIZE 100 /*待ち行列の大きさ*/
ELEM queue[QUEUE_SIZE]; /*待ち行列の定義*/
int front; /*待ち行列の先頭*/
int rear; /*待ち行列の末尾*/
#define next(a) ( ((a)+1) % QUEUE_SIZE) //次の要素の添字を求める
/*エラー処理*/
void error(){
printf("stderr");
exit(1);
}
/*待ち行列の初期化*/
void init(){
front = rear = 0;
}
/*待ち行列にデータを入れる*/
void enqueue(ELEM x){ /*訂正部分*/
if(next(rear) == front) error("待ち行列がフル状態のため、要素が入りません。");
queue[rear] = x;
rear = next(rear);
}
/*待ち行列からデータを取り出す*/
ELEM dequeue(){
ELEM x;
if(front == rear) error("待ち行列が空状態のため、要素を取り出せません。");
x = queue[front];
front = next(front);
return x;
}
/*待ち行列が空かどうかを調べる*/
/*空なら1,空でなければ0を返す*/
int empty(){
return front == rear;
}
int main(void){
int a,i;
init(); /*初期化*/
do{
scanf("%d",&a);
enqueue(a);
i++;
}while(a != 0);
init();
do{
printf("%d",dequeue(a));
i--;
}while(i != 0);
}