如果希望循环队列中的向量单元都能得到利用,则可设置一个标志域tag,每当尾指针和头指针值相同时,以tag的值为O或1来区分队列状态是“空”还是“满”.请对下列函数填空,使其分别实现与此结构相应的入队列和出队列的算法.intEnQueue(CirQueue*Q,DataType x){if Q->tag==1 return 0;Q->data[Q->rear]=x;Q->rear=(Q->rear+1)%MAXQSIZEif(Q->rear==Q->front)Q->tag=1return1:}intDeQ

题目

如果希望循环队列中的向量单元都能得到利用,则可设置一个标志域tag,每当尾指针和头指针值相同时,以tag的值为O或1来区分队列状态是“空”还是“满”.请对下列函数填空,使其分别实现与此结构相应的入队列和出队列的算法.

intEnQueue(CirQueue*Q,DataType x)

{

if Q->tag==1 return 0;

Q->data[Q->rear]=x;

Q->rear=(Q->rear+1)%MAXQSIZE

if(Q->rear==Q->front)Q->tag=1

return1:

}

intDeQueue(CirQueue*Q,DataType*x)

{

if((1))return0;

*x=Q->data[Q->front];

Q->front= (2) ;

(3) ;

return1;

}

(1)

(2)

(3)


相似考题
参考答案和解析
正确答案:

(1)Q->tag= =0(或者!Q->tag)//如果标志域tag为0,则队空,无法出队,算法结束;
(2)(Q->front+l)% MAXQSIZE//出队,头指针循环加1;
(3)if(Q->rear= =Q->front)Q->tag=0;//出队后,则检查尾指针是否等于头指针,若相等,则队空,置标志域tag为0.
更多“如果希望循环队列中的向量单元都能得到利用,则可设置一个标志域tag,每当尾指针和头指针值相同时, ”相关问题
  • 第1题:

    假设以数组Q[m]存放循环队列中的元素, 同时设置一个标志tag,以tag == 0和tag == 1来区别在队头指针(front)和队尾指针(rear)相等时,队列状态为“空”还是“满”。试编写与此结构相应的插入(enqueue)和删除(dlqueue)算法。


    参考答案:
      [算法描述]
      (1)初始化
      SeQueue QueueInit(SeQueue Q)
      {//初始化队列
      Q.front=Q.rear=0; Q.tag=0;
      return Q;
      }
      (2)入队
      SeQueue QueueIn(SeQueue Q,int e)
      {//入队列
      if((Q.tag==1) && (Q.rear==Q.front)) cout<<"队列已满"<  else
      {Q.rear=(Q.rear+1) % m;
      Q.data[Q.rear]=e;
      if(Q.tag==0) Q.tag=1; //队列已不空
      }
      return Q;
      }
      (3)出队
      ElemType QueueOut(SeQueue Q)
      {//出队列
      if(Q.tag==0) { cout<<"队列为空"<  else
      {Q.front=(Q.front+1) % m;
      e=Q.data[Q.front];
      if(Q.front==Q.rear) Q.tag=0; //空队列
      }
      return(e);
      }

  • 第2题:

    下列叙述中正确的是( )。

    A.循环队列有队头和队尾两个指针,因此,循环队列是非线性结构

    B.在循环队列中,只需要队头指针就能反映队列中元素的动态变化情况

    C.在循环队列中,只需要队尾指针就能反映队列中元素的动态变化情况

    D.循环队列中元素的个数是由队头指针和队尾指针共同决定的


    正确答案:D
    D【解析】循环队列中元素的个数是由队头指针和队尾指针共同决定的,元素的动态变化也是通过队头指针和队尾指针来反映的。

  • 第3题:

    在一个容量为25的循环队列中,若头指针front=16,尾指针rear=9,则该循环队列中共有【 】测—个元素。


    正确答案:18
    18 解析:设循环队列的容量为n。若rear>front,则循环队列中的元素个数为rear-front;若rearfront,则循环队列中的元素个数为n+(rear-front)。题中,front=16,Year=9,即rearfront,所以,循环队列中的元素个数为m+(rear-front)=25+(9-16)=18。

  • 第4题:

    下列叙述中正确的是( )。【考点4队列】

    A.循环队列有队头和队尾两个指针,因此循环队列是非线性结构

    B.在循环队列中,只需要队头指针就能反映队列中元素的动态变化情况

    C.在循环队列中,只需要队尾指针就能反映队列中元素的动态变化情况

    D.循环队列中元素的个数是由队头指针和队尾指针共同决定的


    正确答案:D
    循环队列中元素的个数是由队头指针和队尾指针共同决定的,元素的动态变化也是通过队头指针和队尾指针来反映的。

  • 第5题:

    对一个循环单链表中,表尾结点的指针域与表头指针值()


    正确答案:相同

  • 第6题:

    链队列实际上是一个同时带有头指针和尾指针的单链表,尾指针指向该单链表的()。


    正确答案:最后一个结点

  • 第7题:

    用循环单链表表示的链队列中,可以不设队头指针,仅在队尾设置队尾指针。


    正确答案:正确

  • 第8题:

    要在一个带头结点的单向循环链表中删除头结点,得到一个新的不带头结点的单向循环链表,若结点的指针域为next,头指针为head,尾指针为p,则可执行head=head->next;()。


    正确答案:p->next=head;

  • 第9题:

    在顺序队列中,应该有队头和队尾两个指针来指示,队头指针和队尾指针的初值在队列的初始化时均应该设置为(),当对队列进行插入和删除的操作后,如果头指针和尾指针相等时,队列为()。


    正确答案:0;空

  • 第10题:

    填空题
    要在一个带头结点的单向循环链表中删除头结点,得到一个新的不带头结点的单向循环链表,若结点的指针域为next,头指针为head,尾指针为p,则可执行head=head->next;()。

    正确答案: p->next=head
    解析: 暂无解析

  • 第11题:

    填空题
    对一个循环单链表中,表尾结点的指针域与表头指针值()

    正确答案: 相同
    解析: 暂无解析

  • 第12题:

    判断题
    在用循环单链表表示的链式队列中,可以不设队头指针,仅在链尾设置队尾指针。()
    A

    B


    正确答案:
    解析:

  • 第13题:

    要在一个带头结点的单向循环链表中删除头结点,得到一个新的不带头结点的单向循环链表,若结点的指针域为next,头指针为head,尾指针为p,则可执行head=head-> next; p->next=head。()

    此题为判断题(对,错)。


    标准答案:对

  • 第14题:

    对于循环队列,下列叙述中正确的是( )。

    A.循环队列中元素的个数是由队头指针和队尾指针共同决定

    B.在循环队列中,需要队头指针就能反映队列中元素的动态变化情况

    C.在循环队列中,队头指针一定大于队尾指针

    D.在循环队列中,队头指针一定小于队尾指针


    正确答案:A
    循环队列是将顺序队列首尾相连形成的,随着插入元素或删除元素的进行,其队头指针及队尾指针是在不断变化的,有时可能会出现队头指针大于队尾指针的情况,也可能是队尾指针大于队头指针。

  • 第15题:

    在链表结构中,采用(59)可以用最少的空间代价和最高的时间效率实现队列结构。

    A.仅设置尾指针的单向循环链表

    B.仅设置头指针的单向循环链表

    C.仅设置尾指针的双向链表

    D.仅设置头指针的双向链表


    正确答案:A
    解析:采用链表作为存储结构时,从节省空间的角度和需要实现的运算角度考虑(不需要从两个方向遍历元素),应使用单链表,如图2-17所示。

    基本队列定义为元素从一端进从另一端出,以保证先进入的元素先出来。若以最高的时间效率实现元素入、出队列,就应该在链表两端设置指针,使入队和出队操作最简单。从下图可以看出,若仅设置头指针(指向链表的第一个结点),删除元素时比较简单(修改第一个结点的指针域的指向),而插入元素时就需要遍历整个链表以获得尾指针。若仅设置尾指针(指向链表的最后一个结点),则可直接获得头指针(取尾结点指针域的值)以实现删除操作,插入元素时则修改两个指针域(尾结点指针域和新插入结点的指针域)。

  • 第16题:

    对于循环队列,下列叙述中正确的是( )。

    A.循环队列中元素的个数是由队头指针和队尾指针共同决定的

    B.在循环队列中,只需要队头指针就能反映队列中元素的动态变化情况

    C.在循环队列中,队头指针一定大于队尾指针

    D.在循环队列中,队头指针一定小于队尾指针


    正确答案:A
    循环队列是将顺序队列首尾相连形成的,随着插入元素或删除元素的进行,其队头指针及队尾指针是在不断变化的,有时可能会出现队头指针大于队尾指针的情况,也可能是队尾指针大于队头指针。

  • 第17题:

    在一个链栈中,若栈顶指针等于NULL,则为();在一个链队中,若队首指针与队尾指针的值相同,则表示该队列为()或该队列为()。


    正确答案:栈空;空队;队列只有一个元素

  • 第18题:

    在一个链式栈中,若栈顶指针等于NULL则为(),在一个链式队列中,若队头指针与队尾指针的值相同,则表示该队列为()或该队列()。


    正确答案:空栈;空;只含有一个结点

  • 第19题:

    设有一个单向循环链表,头指针为head,链表中结点的指针域为next,p指向尾结点的直接前驱结点,若要删除尾结点,得到一个新的单向循环链表,可执行操作()。


    正确答案:p->next=head;

  • 第20题:

    设循环队列的头指针front指向队首元素,尾指针rear指向队尾元素后的一个空闲元素,队列的最大空间为MAXLEN,则队满标志为()


    正确答案:front=(rear+1)%MAXLEN

  • 第21题:

    填空题
    设循环队列的头指针front指向队首元素,尾指针rear指向队尾元素后的一个空闲元素,队列的最大空间为MAXLEN,则队满标志为()

    正确答案: front=(rear+1)%MAXLEN
    解析: 暂无解析

  • 第22题:

    填空题
    设有一个单向循环链表,头指针为head,链表中结点的指针域为next,p指向尾结点的直接前驱结点,若要删除尾结点,得到一个新的单向循环链表,可执行操作()。

    正确答案: p->next=head
    解析: 暂无解析

  • 第23题:

    填空题
    在一个链式栈中,若栈顶指针等于NULL则为(),在一个链式队列中,若队头指针与队尾指针的值相同,则表示该队列为()或该队列()。

    正确答案: 空栈,空,只含有一个结点
    解析: 暂无解析