阅读下列函数说明和C函数,将应填入(n)处的字句写在对应栏内。 [说明] 链式存储的队列称为链队。根据队列的FIFO原则,为了操作上的方便,可以使用带头指针front和尾指针rear的单链表来实现链队。若链队元素的数据类型为datatype,则链队结

admin2009-02-15  42

问题 阅读下列函数说明和C函数,将应填入(n)处的字句写在对应栏内。
[说明]
   链式存储的队列称为链队。根据队列的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从链队中取出。
转载请注明原文地址:https://jikaoti.com/ti/xrW7FFFM
0

最新回复(0)