问答题 [说明] 循环队列的类型定义如下(其中队列元素的数据类型为datatype): typedef struct{ datatype data[MAXSIZE]; /*数据的存储区*/ int front,rear; /*队首、队尾指针*/ int num; /*队列中元素的个数*/ }c _ SeQueue; /*循环队*/ 下面函数及其功能说明如下: (1) c_SeQueue* Init_SeQueue():新建队列; (2) int ln_SeQueue( c_SeQueue *q, datatype x):将元素x插入队列q,若成功返回1否则返回0; (3) int Out_SeQueue (c_SeQueue *q, datatype *x):取出队列q队首位置的元素,若成功返回1否则返回0。 [函数] c_SeQueue* Init_SeQueue() { q=malloc(sizeof(c_SeQueue)); q->front=q->rear=MAXSIZE-1; {{U}} (1) {{/U}}; return q; } int In_SeQueue( c_SeQueue *q, datatype x) { if(q->num= =MAXSIZE) return 0; /*队满不能入队*/ else { q->rear={{U}} (2) {{/U}}; q->data[q->rear]=x; {{U}}(3) {{/U}}; return 1; /*入队完成*/ } } int Out_SeQueue( c_SeQueue *q, datatype *x) { if (q->num= =0) return 0; /*队空不能出队*/ else{ *x= {{U}}(4) {{/U}}; /*读出队首元素*/ q->front= {{U}}(5) {{/U}}; q->num- -; return 1; /*出队完成*/ } }
【正确答案】
【答案解析】(1) q->num=0 (2) (q->rear+1) % MAXSIZE (3) q->num++ (4) q->data[q->front] (5) (q->front+1)%MAXSIZE [解析] (1)新建的队列中元素个数应为0; (2)向循环队列中添加新元素后,队尾指针应向后移动一位; (3)向循环队列中添加新元素后,队列中元素个数应增1; (4)取出队首位置的元素; (5)从循环队列中取出一个元素后,队首指针应向后移动一位。