数据结构

循环队列sq中,用数组elem存放数据元素,sq.front指示队头元素的前一个位置,sq.rear指示队尾元素的当前位置,队列的最大容量为MAXSIZE,则队列满的条件为()。A、sq.front= sq.rearB、sq.front= sq.rear+1C、(sq.front +1)mod MAXSIZE= sq.rearD、(sq.rear+1)mod MAXSIZE= sq.front

题目

循环队列sq中,用数组elem存放数据元素,sq.front指示队头元素的前一个位置,sq.rear指示队尾元素的当前位置,队列的最大容量为MAXSIZE,则队列满的条件为()。

  • A、sq.front= sq.rear
  • B、sq.front= sq.rear+1
  • C、(sq.front +1)mod MAXSIZE= sq.rear
  • D、(sq.rear+1)mod MAXSIZE= sq.front
如果没有搜索结果,请直接 联系老师 获取答案。
如果没有搜索结果,请直接 联系老师 获取答案。
相似问题和答案

第1题:

用数组A[0…m-1]存放循环队列的元素值,若其头尾指针分别为front和rear,则循环队列中当前元素的个数为______。

A.(rear-front+m)mod m

B.(rear-front+1)mod m

C.(rear-front-1+m)mod m

D.(rear-front)mod m


正确答案:A

第2题:

以数组Q[0…m-1]存放循环队列中的元素,若变量front和qulen分别指示循环队列中队头元素的实际位置和当前队列的长度,则队尾元素的实际位置是()。

A.front+qulen-1
B.(front+qulen)modm
C.(front+qulen-1)modm
D.front+qulen

答案:C
解析:
循环队列的元素顺序存储在数组Q中,已知循环队列中队头元素的存储位置为front。当前队列的长度为qulen,队尾元素的位置要在front上加上qulen,然后减l(第一个元素存储在front的位置上),对于循环队列求队尾的位置还要对总长度求余,所以队尾元素的实际位置为(front+qulen-1)modm。

第3题:

用数组A[0,N-1]存放循环队列的元素值,若其头指针和尾指针分别为front和rear,则循环队列中当前元素的个数为

A.(rear-front+N+1)mod N

B.(rear-front+1)mod N

C.(rear-front-1+N)mod N

D.(rear-front)mod N


正确答案:A

第4题:

设顺序表共有n个元素,用数组elem存储,实现在第i个元素之前插入一个元素e的操作,其主要语句为()。

  • A、FOR j=n DOWNTO i DO elem[j]=elem[j+1]; elem[i]=e;
  • B、FOR j=i TO n DO elem[j]=elem[j+1]; elem[i]=e;
  • C、FOR j=i TO n DO elem[j+1]=elem[j]; elem[i]=e;
  • D、FOR j=n DOWNTO i DO elem[j+1]=elem[j]; elem[i]=e;

正确答案:D

第5题:

线性表、数组、堆栈和队列的共同特点是要求()来顺序存放数据元素。


正确答案:连续的存储单元

第6题:

试题四(共 15 分)阅读以下说明和 C 函数,填补函数中的空缺,将解答填入答题纸的对应栏内。【说明】简单队列是符合先进先出规则的数据结构,下面用不含有头结点的单向循环链表表示简单队列。函数 enqueue(queue *q,KeyType new_elem) 的功能是将元素new_elem 加入队尾。函数 Dnqueue(queue *q,KeyType *elem)的功能使将非空队列的队头元素出队(从队列中删除),并通过参数带回刚出队的元素。用单向循环链表表示的队列如图 4-1 所示。

图 4-1 单向循环链表表示的队列示意图队列及链表结点等相关类型定义如下:enum {errOr, OK};typedef int KeyType;typedef struct qNode﹛KeyType data;Struct qNode*next;﹜qNode,*Linkqueue; Typedef struct﹛int size;Link:queue rear;}queue; 【C 函数】int enqueue(queue*q,KeyType new_elem)﹛ //元素 new_elem 入队列qNode*p;P=(qNode*)malloc(sizeof(qNode));if(!p)return errOr;P->data=new_elem;if(q->rear)﹛P->next=q->rear->next;();﹜elseP->next=p;﹙﹚;q->size++;return OK;﹜ int Dequeue(queue*q,KeyType*elem)﹛ //出队列qNode*p;if(0==q->size) //是空队列return errOr;P=(); //令 p 指向队头元素结点*elem =p->data;q->rear->next=(); //将队列元素结点从链表中去除if(()) //被删除的队头结点是队列中唯一结点q->rear=NULL //变成空队列free(p);q->size--;return OK;﹜


答案:
解析:
(1)Q→rear→next=p(2)Q→rear=p(3)Q→rear→next(4)p→next(5)Q→rear==p 或 Q→rear→next==p→next 或 Q→size==1
【解析】

本题考察C语言指针与链表的知识,为入队列和删除队列问题。对于入队列,那么当队列Q不为空时,P的队尾t要指向原Q的队尾指向的元素,即:P->next=Q->rear->next,Q的队尾要指向p,即:Q→rear→next=p。当队列Q为空时,插入p元素,则p的队尾指向p自身,即:p→next=p,且整个队列Q的队尾也是p,即:Q→rear=p。对于队列删除元素p,先判断Q是否为空,为空队列则返回 ERROR;If(0==q->size) //是空队列Return ERROR;另p指向队头元素结点,队头元素结点可用Q→rear→next表示。此时,p转化为头结点,p出列,则需要Q的队尾指向p的下一个元素,因此第4空填:p→next。最后,判断被删除的队头结点是否是队列中的唯一结点,可采用:Q→rear==p 或 Q→rear→next==p→next 或 Q→size==1 等表示方法。

第7题:

循环队列用数组A[o…m-1]存放其元素值,已知其头尾指针分别为front和rear,则当前元素个数为()。

A.(rear-front+m)modm
B.rear-front+l
C.rear-front-1
D.rear-front

答案:A
解析:
循环队列中rear和front分别指向队尾和队头,当rear>front时,元素的个数为rear-front,根据循环队列的性质,当插入点已经插入到数组A的最后位置且有新的元素插入时,会继续从数组的开始位置执行插入操作,此时rear<front,数组元素的个数为rear-front+m。综合两种情况,循环队列中当前元素的个数计算方法为:(rear-front+m)modm。

第8题:

假设将循环队列定义为:以整型域变量front和length分别指示循环队列中队头元素位置和队列中元素个数,指针elem指示存放队列元素的连续空间的首地址,写出相应的入队列和出队列的算法。


参考答案:

第9题:

循环队列sq中,用数组elem[0‥25]存放数据元素,sq.front指示队头元素的前一个位置,sq.rear指示队尾元素的当前位置,设当前sq.front为20,sq.rear为12,则当前队列中的元素个数为()。

  • A、8
  • B、16
  • C、17
  • D、18

正确答案:D

第10题:

循环队列sq中,用数组elem存放数据元素,sq.front指示队头元素的前一个位置,sq.rear指示队尾元素的当前位置,队列的最大容量为MAXSIZE,则在队列未满时元素x入队列的主要操作为()。

  • A、sq.rear= (sq.rear+1)mod MAXSIZE; sq.elem[sq.rear]=x;
  • B、sq.elem[sq.rear]=x; sq.rear= (sq.rear+1)mod MAXSIZE;
  • C、sq.front= (sq.front+1)mod MAXSIZE; sq.elem[sq.front]=x;
  • D、sq.elem[sq.front]=x; sq.front= sq.front+1;

正确答案:A

更多相关问题