用不带头结点的单链表存储队列,其头指针指向队头结点,尾指针指向队

题目

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

  • A、仅修改队头指针
  • B、仅修改队尾指针
  • C、队头、队尾指针都可能要修改
  • D、队头、队尾指针都要修改
如果没有搜索结果或未解决您的问题,请直接 联系老师 获取答案。
相似问题和答案

第1题:

设某循环队列的容量为50,头指针front=5(指向队头元素的前一位置),尾指针rear=9(指向队尾元素),则该循环队列中共有______个元素。


正确答案:24
24 解析:实现循环队列时,头指针指向第一个元素的前一个空间,尾指针指向最后一个元素。因此,此时队列中6、7、8、…、29这24个空问存有元素,即队列中有29-5=24个元素。

第2题:

单向循环链表是单向链表的一种扩充,当单向链表带有头结点时,把单向链表中尾结点的指针域由空指针改为回答;当单向链表不带头结点时,则把单向链表中尾结点的指针域由空指针改为指向()。


参考答案:头结点的指针、指向第一个结点的指针

第3题:

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

A.仅修改队头指针

B.仅修改队尾指针

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

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


正确答案:C

第4题:

设某循环队列的容量为50,头指针front=5(指向队头元素的前-位置),尾指针rear=29(指向队尾元素),则该循环队列中共有—________个元素。


正确答案:
24【分析】本题主要考查考生对循环队列的存储形式和入队运算、出队运算的理解。循环队列的初始状态为满或空(front=50,rear=50),出队:front=front+1(若front=50,则将1赋值给front),入队:rear=rear+1(若rear=51,则将1赋值给rear)。
我们现在来模拟从循环队列的初始状态,经过多少次入队WWW出队操作来达到最终状态front=5,rear=29。
假设循环队列的初始状态为满(front=50,rear=50),只能先出队,然后再入队。将一个元素出队,front=50+l=51,根据循环队列的规定应该将l赋值给front,即front=1,再将一个元素出队,front=1+1=2,直到出队5个元素,front=5。5个元素出队了,空出了5个空间,所以元素可以入队,将一个元素入队,rear=50+1=51,根据循环队列的规定应
该将l赋值给rear,即rear=1,再将一个元素入队,rear=1+1=2,直到入队29个元素,rear=29。由于出队只空出5个空间,所以无法入队29个元素。因此循环队列的初始状态为满不成立。
假设循环队列的初始状态为空(front=50,rear=50),只能先入队,然后再出队。rear=29,表示有29个元素入队了,也即队列中只有29个元素。现在front=5,表示要有5个元素出队,队列中只剩下29—5=24个元素。因此循环队列的初始状态只能为空。队列中有24个元素。
同理,若循环队列的最终状态为front=29,rear=5,我们可以肯定循环队列的初始状态为满,则队中有50—29+5=26个元素。
若循环队列的最终状态为front=29,rear=29,我们可以肯定循环队列为满或空,所以循环队列中有50或O个元素。
总结,规律如下:若front>rear,队列中有n-front+rear个元素(其中n为循环队列的容量);若front<rear,队列中有rear-front个元素;若front=rear,队列中有n个或0个元素。因此本题的正确答案是24。

第5题:

某单循环链表头指针为head且表长大于1,指针p指向表中某个结点,若p→next→next= head,则(11)。

A.p指向头结点

B.p指向尾结点

C.*p的直接后继是头结点

D.*P的直接后继是尾结点


正确答案:D
解析:因为p→next→next=head,所以p→next是尾结点,即*P的直接后继是尾结点。

第6题:

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


参考答案:
  置空队就是建立一个头节点,并把头尾指针都指向头节点,头节点是不存放数据的;判队空就是当头指针等于尾指针时,队空;入队时,将新的节点插入到链队列的尾部,同时将尾指针指向这个节点;出队时,删除的是队头节点,要注意队列的长度大于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;
  }

第7题:

对于单链表表示法,以下说法正确的是()

A指向链表的第一个结点的指针,称为头指针

B单链表的每一个结点都被一个指针所指

C任何结点只能通过指向它的指针才能引用

D尾指针变量具标识单链表的作用,故常用尾指针变量来命名单链表


参考答案:ABC

第8题:

●在头指针为head且表长大于1的单循环链表中,指针p指向表中某个结点,若p→*next→*next=head,则 (55) 。

(55) A.p指向头结点

B.p指向尾结点

C.*p的直接后继是头结点

D.*p的直接后继是尾结点


正确答案:D
【解析】因为循环链表的尾结点的指针域中存放的是头指针,而尾结点由其直接前驱结点的指针域所指向,因此,当指针p指向尾结点的直接前驱结点时,满足关系式p->next->next=head。

第9题:

程序中已构成如下图所示的不带头结点的单向链表结构,指针变量s、P、q、均已正确定义,并用于指向链表结点,指针变量s总是作为头指针指向链表的第一个结点。

该程序段实现的功能是( )。

A.首结点成为尾结点

B.尾结点成为首结点

C.删除首结点

D.删除尾结点


正确答案:A
循环找到末尾结点,然后赋值给第一个结点,所以选择A)。

第10题:

在长度为n(Il>1)的()上,删除第一个元素.其时间复杂度为O(n)。

A.只有首结点指针的不带头结点的循环单链表
B.只有尾结点指针的不带头结点的循环单链表
C.只有尾结点指针的带头结点的循环单链表
D.只有头结点的循环单链表

答案:A
解析:
只有首结点指针的不带头结点的循环单链表删除第一个元素,需要遍历整个链表,因此A项的时间复杂度为O(n),BCD三项的时间复杂度都为O(1)。

更多相关问题