簡単なキューをつくる課題が学校で出ています。そこで、疑問点が二つあります。
まず初めに分からなかったのがキューのサイズの初期化の方法です。
initQueueで行っている
c
1que->free = QSIZE(que->data);
はマクロで定義された関数にdata[]の先頭アドレスを渡しているのは理解できたんですが,先頭アドレスの大きさをdata[0]の大きさで割ると結局QSIZEはどんな値を返すんでしょうか。またマクロで定義するメリットはなんでしょうか。
次にデータを格納する関数
c
1int initQueue( struct Queue *que )
では//空だったら,//末尾に達したら とありますがどうしてこのコードでこういった判定が可能なのでしょうか。
c
1#define SIZE 8 2#define QSIZE(x) (sizeof(x)/sizeof(x[0])) 3 4struct Queue { 5 int data[SIZE]; 6 int front;//先頭の要素番号 7 int rear; //末尾の次の要素番号 8 int free; //空き容量 9}; 10int initQueue( struct Queue *que ){ 11 que->front = que->rear = 0; 12 que->free = QSIZE(que->data); 13 if(memset(que->data, 0, sizeof(que->data))){ 14 return 1; 15 }else{ 16 return 0; 17 } 18} 19int enqueue(struct Queue *que, int new) { 20 if (que->free == 0) { 21 return 0; /* 空きがない */ 22 } 23 else if (que->free == QSIZE(que->data)) { /* 空だったら */ 24 que->data[que->rear] = new; 25 } 26 else { 27 if (++que->rear >= QSIZE(que->data)) { /* 末尾に達した */ 28 que->rear = 0; /* 先頭に戻る */ 29 } 30 que->data[que->rear] = new; 31 } 32 que->free--; 33 return 1; 34} 35
回答4件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。