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

题目

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

如果没有搜索结果或未解决您的问题,请直接 联系老师 获取答案。
相似问题和答案

第1题:

设循环队列用C语言数组A[m]表示,front指针指向真正队头的前一个位置,rear指针指向真正队尾,则(1)队满的条件为(),(2)队空的条件为()。


参考答案:front=(rear+1)%mrear==front

第2题:

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

A) 队头指针是固定不变的

B) 队头指针一定大于队尾指针

C) 队头指针一定小于队尾指针

D) 队头指针可以大于队尾指针,也可以小于队尾指针


正确答案:D

第3题:

下列叙述中正确的是

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

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

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

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


正确答案:D

第4题:

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

A.队头指针是固定不变的

B.队头指针一定大于队尾指针

C.队头指针一定小于队尾指针

D.队头指针可以大于队尾指针,也可以小于队尾指针


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

第5题:

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

A )队头指针是固定不变的

B )队头指针一定大于队尾指针

C )队头指针一定小于队尾指针

D )队头指针可以大于队尾指针,也可以小于队尾指针


正确答案:D

第6题:

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

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


参考答案:对

第7题:

用不带头结点的单链表存储队列,其头指针指向队头结点,尾指针指向队尾结点,则在进行出队操作时()。

A.仅修改队头指针

B.仅修改队尾指针

C.队头、队尾指针都可能要修改

D.队头、队尾指针都要修改


正确答案:C

第8题:

下列叙述中正确的是( )

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

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

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

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


正确答案:D

所谓循环队列,就是将队列存储空间的最后一个位置绕到第一个位置,形成逻辑上的环状空间,供队列循环使用。在循环队列中,用队尾指针rear指向队列中的队尾元素,用排头指针front指向排头元素的前一个位置,因此,从排头指针front指向的后一个位置直到队尾指针real指向的位置之间所有的元素均为队列中的元素。求解队列中元素个数的方法是:若front>rear,队列中有n-front+rear个元素(其中n为循环队列的容量);若front<rear,队列中有real-front个元素;若front=rear,队列中有n个或0个元素。循环队列是线性结构。因此本题的正确答案是D。

第9题:

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

A.带链队列的存储空间可以不连续,但队头指针必须大于队尾指针

B.带链队列的存储空间可以不连续,但队头指针必须小于队尾指针

C.带链队列的存储空间可以不连续,且队头指针可以大于也可以小于队尾指针

D.以上说法都不对


正确答案:C

第10题:

假设以带头结点的循环链表表示队列,并且只设一个指针指向队尾元素站点(注意不设头指针) ,试编写相应的置空队、判队空 、入队和出队等算法。


参考答案:
  置空队就是建立一个头节点,并把头尾指针都指向头节点,头节点是不存放数据的;判队空就是当头指针等于尾指针时,队空;入队时,将新的节点插入到链队列的尾部,同时将尾指针指向这个节点;出队时,删除的是队头节点,要注意队列的长度大于1还是等于1的情况,这个时候要注意尾指针的修改,如果等于1,则要删除尾指针指向的节点。
  [算法描述]
  //先定义链队结构:
  typedef struct queuenode
  {Datatype data;
  struct queuenode *next;
  }QueueNode; //以上是结点类型的定义
  typedef struct
  {queuenode *rear;
  }LinkQueue; //只设一个指向队尾元素的指针
  (1) 置空队
  void InitQueue( LinkQueue *Q)
  { //置空队:就是使头结点成为队尾元素
  QueueNode *s;
  Q->rear = Q->rear->next;//将队尾指针指向头结点
  while (Q->rear!=Q->rear->next)//当队列非空,将队中元素逐个出队
  {s=Q->rear->next;
  Q->rear->next=s->next;
  delete s;
  }//回收结点空间
  }
  (2) 判队空
  int EmptyQueue( LinkQueue *Q)
  { //判队空。当头结点的next指针指向自己时为空队
  return Q->rear->next->next==Q->rear->next;
  }
  (3) 入队
  void EnQueue( LinkQueue *Q, Datatype x)
  { //入队。也就是在尾结点处插入元素
  QueueNode *p=new QueueNode;//申请新结点
  p->data=x; p->next=Q->rear->next;//初始化新结点并链入
  Q-rear->next=p;
  Q->rear=p;//将尾指针移至新结点
  }
  (4) 出队
  Datatype DeQueue( LinkQueue *Q)
  {//出队,把头结点之后的元素摘下
  Datatype t;
  QueueNode *p;
  if(EmptyQueue( Q ))
  Error("Queue underflow");
  p=Q->rear->next->next; //p指向将要摘下的结点
  x=p->data; //保存结点中数据
  if (p==Q->rear)
  {//当队列中只有一个结点时,p结点出队后,要将队尾指针指向头结点
  Q->rear = Q->rear->next;
  Q->rear->next=p->next;
  }
  else
  Q->rear->next->next=p->next;//摘下结点p
  delete p;//释放被删结点
  return x;
  }

更多相关问题