设rear是指向非空、带头结点的循环单链表的尾指针,则该链表首结

题目

设rear是指向非空、带头结点的循环单链表的尾指针,则该链表首结点的存储位置是()

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

第1题:

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


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

第2题:

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

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

A.首结点成为尾结点

B.尾结点成为首结点

C.删除首结点

D.删除尾结点


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

第3题:

非空的单向循环链表的尾结点满足( )(设头指针为head,指针p指向尾结点)。

A.p->next = =NULL

B.p= =NULL

C.p= =head

D.p->next= =head


参考答案:D

第4题:

以下各种存储结构中,最适合用作链队的链表是()。

A.带队首指针和队尾指针的循环单链表
B.带队首指针和队尾指针的非循环单链表
C.只带队首指针的非循环单链表
D.只带队首指针的循环单链表

答案:B
解析:
因为队列的入队和出队操作都在端点进行。即在队首和队尾进行。所以带队首指针和队尾指针的非循环单链表最适合用作链队的链表。

第5题:

若用单链表来表示队列,则应该选用()。

A.带尾指针的非循环链表
B.带尾指针的循环链表
C.带头指针的非循环链表
D.带头指针的循环链表

答案:B
解析:
假设尾指针为TAIL,则通过TAIL可访问队尾,通过TAIL—>next可访问队头。

第6题:

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


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

第7题:

设rear是指向非空带头结点的循环单链表的尾指针,则删除起始结点的操作可表示为( )

A.s=rear;

B.rear=rear—>next; rear=rear—>next; free(rear); free(s);

C.rear=rear—>next—>next;

D.s=rear—>next—>next; free(rear); rear—>next—>next=s—>next; free(s);


正确答案:D

第8题:

●设rear是指向非空带头结点的循环单链表的尾指针,则删除链表第一个结点的操作可表示为 (22) 。

(22) A.p=rear;rear=rear→next;free(p);

B.rear=rear→next;free(p);

C.rear=rear→next→next;free(p);

D.p=rear→next→next;rear→next=p→next;free(p);


正确答案:D
【解析】此题是考查链表的操作,在单向循环链表中要删除头节点时,需要的操作为修改尾节点的下一个节点指针变量,指向第二节点,释放被删节点。

第9题:

设单循环链表中结点的结构为(data,link),且rear是指向非空的带表头结点的单循环链表的尾结点的指针。若想删除链表第一个结点,则应执行下列哪一个操作()。

A.s=rear;rear=rear->link;deletes;
B.rear=rear->link;deleterear;
C.rear=rear->link->link;deleterear;
D.s=rear->link->link;rear->link->link=s->link;deletes;s为第一个结点硫

答案:D
解析:
若要删除结点需要改变尾指针的指向。

第10题:

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

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

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

更多相关问题