问题 问答题

[说明] 链式存储的队列称为链队。根据队列的FIFO原则,为了操作上的方便,可以使用带头指针front和尾指针rear的单链表来实现链队。若链队元素的数据类型为datatype,则链队结构描述如下:typedef struct node{ datatypedata; structnode *next;} QNode; /*链队结点的类型*/typedef struct{ QNnode *front,*rear;} LQueue; /*将头尾指针封装在一起的链队*/ 以下这种链队的几个例子:

设q是一个指向链队的指针,即LQueue *q。下面各函数的功能说明如下: (1) LQueue *Init_LQueue():创建并返回一个带头尾结点的空链队; (2) intEmpty_LQueue( LQueue *q):判断链队q是否空; (3) void In_LQueue(LQueue *q, datatypex):将数据x压入链队q; (4) int Out_LQueue(LQuere *q, datatype *x):弹出链队q的第一个元素x,若成功则返回返回1否则返回0。[函数]LQueae *Init_LQueue(){ LQueue *q, *p; q=malloc(sizeof(LQueue)); /*申请链队指针*/ P=malloc(sized(QNode));/*申请头尾指针结点*/ p->next=NULL; (1) =p; return q;}int Empty_LQueue(LQueue *q){ if(q->front (2) q>rear) return 0; else return 1;}void In_LQueue(LQueue *q, datatype x){ QNoda *p; p=malloc(sizeof(QNnode));/*申请新接点*/ p->data=x; p->next=NULL; (3) =p; q->rear=p;}int Out_LQueue(LQueue *q, datatype *x){ QNnode *p; if(Empty_LQueue(q)) return 0; /*队空,操作失败*/ else{ p=q->front->next; *x= (4) ; (5) =p->next; free(p); if (q->front->next= =NULL)q->rear=q->front; return 1; }}

答案

参考答案:

解析:(1) q->front=q->rear (2) = = (3)q-> rear->next (4) p->data (5) q->front->next (1)初始化链队q时,需要初始化其头尾指针,空链队的头尾指针相等;(2)链队头尾指针重合当且仅当链队为空;(3)向链队插入新元素的操作是在链队末尾进行的,需要将新元素结点接在原链队队尾,再让新的尾指针指向这一新结点;(4)~(5):链队q的第一个元素存放在其头结点之后的第一个结点(即p=q->front->next)中。*x= p->data表示将这个元素取出,以参数*x的形式返回:q->front->next=p->next表示将结点p从链队中取出。

单项选择题
单项选择题