数据结构

设长度为n的链队列用单循环链表表示,若只设头指针,则入队和出队操作的时间复杂度分别为()和();若只设尾指针,则入队和出对操作的时间复杂度分别为()和()。

题目

设长度为n的链队列用单循环链表表示,若只设头指针,则入队和出队操作的时间复杂度分别为()和();若只设尾指针,则入队和出对操作的时间复杂度分别为()和()。

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

第1题:

设循环链队列的长度为n,若只设尾指针,则出队和入队的时间复杂度分别是()和()。


参考答案:O(1)、O(1)

第2题:

●设长度为n的链队列用单循环链表表示,若只设头指针,则入队、出队操作的时间是 (41) ,若只设尾指针呢,需要的时间为 (42) 。

(41) A.O(n2,O (1)

B.O(n),O (1)

C.O(n2-1),O(n)

D.O(n-1),O(n-1)

(42) A.O (1) ,O (1)

B.O(n),O (1)

C.O(n2),O (1)

D.O(n),O(n)


正确答案:B,A
【解析】只设头指针时,入队操作的时间为O(n),出队操作的时间为O(1);
只设尾指针时,入队操作的时间为O(1),出队操作的时间也为O(1)。

第3题:

若只在线性表的首、尾两端进行插入操作,宜采用的存储结构为()。

A.顺序表

B.用头指针表示的单循环链表

C.用尾指针表示的单循环链表

D.单链表


参考答案:C

第4题:

设长度为n的链队列用单循环链表表示,若只设头指针,则入队操作的时间复杂度为_______。

A.O(1)

B.O(log2n)

C.O(n)

D.O(n2)


正确答案:C

第5题:

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


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

第6题:

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

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


参考答案:对

第7题:

设循环队列Q的定义中有rear和len两个域变量,其中rear表示队尾元素的指针,len表示队列的长度,如下图所示(队列长度为3,队头元素为e)。设队列的存储空间容量为M,则队头元素的指针为(57)。

A.(Q.rear+Q.len-1)

B.(Q.rear+Q.1en-1+M)%M

C.(Q.rear-Q.1en+1)

D.(Q.rear-Q.1en+1+M)%M


正确答案:D
解析:按照正常线性存储的队列,队头元素的指针为(Q.rear-Q.len+1),而在循环队列里面,Q.rear-Q.1en+1可能会由于循环存储而变为负值,所以需要处理为(Q.rear-Q.1en+1+M)%M。

第8题:

设循环队列用C语言数组A[m]表示,front指针指向真正队头的前一个位置,rear指针指向真正队尾,队列中当前元素个数为n,则(1)若已知front、rear,则n=()。(2)若已知front、n,则rear=()。(3)若已知rear、n,则front=()。


参考答案:n=(rear-front+m)%mrear=(front+n)%mfront=(rear-n+m)%m

第9题:

设长度为n的链队列用单循环链表表示,若只设头指针,则人队、出队操作的时间是(41);若只设尾指针,需要的时间为(42)。

A.O(n2),O(1)

B.O(n),O(1)

C.O(n2-1),O(n)

D.O(n-1),O(n-1)


正确答案:B

第10题:

设循环队列Q的定义中有front和size两个域变量,其中front表示队头元素的指针,size表示队列的长度,如下图所示(队列长度为3,队头元素为x,队尾元素为z)。设队列的存储空间容量为M,则队尾元素的指针为 (58)。

A.(Q.front+Q.size-1)

B.(Q.front+Q.size-1+M)%M

C.(Q.front-Q.size)

D.(Q.front-Q.size+M)%M


正确答案:B
本题考查循环队列队尾指针的计算方法。从图示可以看出,要得到z的值可进行Q.front+Q.size-1操作,但在此不容忽视的一个问题是,循环队列在进行了多次入队出队操作之后,Q.front+Q.size-1有可能大于M,如Q.front指向M-1空间时,Q.front+Q.size-1=M+1,这已超出队列长度,所以需要让其与M进行求模操作,修正位置号。

更多相关问题