c言語の質問です。データ構造のキューを実装したプログラムを作成しており、息詰まったので教えていただきたいです。case2を実行したときにうまくdequeueできなく、表示できないです。 所々うまくできていないので、お力添えお願いします。 理想の実行結果 1.Enqueue 2.Dequeue 9.Quit >1 number=1, head=0, tail=1 Q[0]aQ[1] Q[2] Q[3] 1.Enqueue 2.Dequeue 9.Quit >1 number=2, head=0, tail=2 Q[0]aQ[1]bQ[2] Q[3] 1.Enqueue 2.Dequeue 9.Quit >1 number=3, head=0, tail=3 Q[0]aQ[1]bQ[2]cQ[3] 1.Enqueue 2.Dequeue 9.Quit >2 a dequeue number=2, head=1, tail=3 Q[0] Q[1]bQ[2]cQ[3] 1.Enqueue 2.Dequeue 9.Quit > 9 ーーーーーーーーーーーーーーーー #include <stdio.h> #define MAX 4 void enquene(char *Q,char x); char dequeue(char *Q); void initialize(char *Q); int empty(char *Q); int head=0; int tail=-1; int number=0; void enqueue(char *Q,char x){ if(number<MAX){ number++; tail=(tail%MAX)+1; Q[tail]=x; } else{ printf("Queue Q is overflows.¥n"); } } char dequeue(char *Q){ if(number>0){ number--; head=(head%MAX)+1; return(Q[head]); } else{ printf("Queue Q is empty.¥n"); return('0'); } } void initialize(char *Q){ int i; head=0; tail=0; number=0; for(i=0;i<MAX;i++){ Q[i]='\0'; } } int empty(char *Q){ if(number==0){ return(1); } return(0); } int main(void){ char x; char Q[MAX]; int z=0,n=0,i; while(z != 9){ // 9が入力されるまで繰り返す /* メニュー項目表示 */ printf("¥n1.Enqueue¥n"); printf("2.Dequeue¥n"); printf("9.Quit¥n"); printf(">"); /* コマンド入力 */ scanf("%d",&z); switch(z){ case 1: n++; if(n==1){ enqueue(Q,'a'); } else if(n==2){ enqueue(Q,'b'); } else if(n==3){ enqueue(Q,'c'); } else if(n==4){ enqueue(Q,'d'); } else if(n==5){ enqueue(Q,'e'); } printf("number=%d, head=%d, tail=%d¥n",number,head,tail); for(i=0;i<4;i++){ printf("Q[%d]%c",i,Q[i]); } printf("¥n"); break; case 2: printf("%c dequeue¥n",dequeue(Q)); printf("number=%d, head=%d, tail=%d¥n",number,head,tail); for(i=0;i<4;i++){ printf("Q[%d]%c",i,Q[i]); } printf("¥n"); break; case 9: printf("¥n終了します¥n"); break; default: printf("¥n入力に誤りがあります¥n"); break; } } return(0); }
C言語関連