问题 问答题

[说明]
链式存储的队列称为链队。根据队列的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从链队中取出。

选择题
问答题 简答题