いつもお世話になっています。キューについて質問させていただきます。
エンキューだけを考えて表示させたいのですが、listqの関数でキューの中身を表示させる方法がわかりません。引数がvoidでもデータを受けとり、キューの中身を表示できるものなのでしょうか?
以下がコードです。```C言語
コード
#include <stdio.h> #include <stdlib.h> #define QLEN 5 #define QEMP -1 #define QFUL -1 int enq(int); //int deq(void); void listq(void); /* キューに使用する配列、その他外部変数の宣言 */ //int a[QLEN],n,m,r; int main(){ int a[QLEN],n,m,r; int i; while(1){ /* 処理の入力 */ /* 入力に従って関数を呼ぶ */ /* なお、enq()の場合は呼ぶ前に引数入力 */ /* deq()の場合は呼んだ後にデータ出力 */ /* 終了の場合はexit()を呼ぶ */ //scanf("%d",&n); printf("1 = enQ/2 = deQ/else = end ==>"); scanf("%d",&n); if(n==1){/*エンキューをします*/ printf(" Enter enQ data ==>"); scanf("%d",&m); r=enq(m); printf("Queue :"); for(i=0;i<QLEN;i++){ printf("%d",a[i]); } printf("\n"); break; } //else if(n==2){/*デキューします*/ //deq(n); // } listq(); if(n!=1 || n!=2){ exit(0); } } return 0; } void listq(void){ int k,data,j; int a[k]; /* キューが空なら"Queue empty!\n"表示 */ /* 空じゃない場合は並んでいる個数分データ表示 */ if(data==0){ printf("Queue empty!\n"); } else { for(k=0;k<j;k++){ printf("%d",a[k]); } printf("\n"); } } int enq(int data){ int a[QLEN]; static int j=0; //j++; if(j>=QLEN){ return QFUL; } else { a[j]=data; return 0; } j++; } /* キューが満杯ならQFULをreturn*/ /* そうでないならキューの最後尾にdataを追加 */ //} //int deq(void){ /* キューが空ならQEMPをreturn*/ /* そうでないならキューの最前列のdataを変数に入れ */ /* 後続のデータを一つづつ前に移動させ、変数の値をリターンする */ //}
So what? あなたは何を聞きたいのですか? 正しく動くか? コードが綺麗か? もっといいアルゴリズムがあるか? 質問文読んでも分かりませんでした。
回答2件
あなたの回答
tips
プレビュー