(单选)已知一个顺序存储的循环队列Q定义如下: #define MAXSIZE 50 typedef struct { QueueElementType element[MAXSIZE]; int front; //队头指示器 int rear; //队尾指示器 }SeqQueue; 则该非空队列取队头元素操作的语句是() A. Q->element[0]; B. Q->element[1]; C. Q->element[Q->front]; D. Q->element[Q->rear];
第1题:
在队列中,(7)允许插入操作,(7)允许删除操作。
A.队头(front)队尾(rear)
B.队尾(rear)队头(front)
C.队头(front)和队尾(rear)队头(front)
D.队头(front)和队尾(rear)队头(front)和队尾(rear)
第2题:
设数组data[0…m]作为循环队列s q的存储空间,front为队头指针,rear为队尾指针,则执行出队操作的语句为( )。
A.S q↑.front:=s q↑.front+1;
B.S q↑.front:=(S q↑.front+1)%maxsize;
C.S q↑.rear:=(S q↑.rear+1)%maxsize;
D.S q↑.front:=(s q↑.front+1)%(maxsize+1);
第3题:
循环队列A[0…m-1)存放其元素,用front和Feat分别表示队头和队尾,则循环队列满的条件是(35)。
A.Q.rear+1==Q.front
B.Q.rear==Q.front+1
C.Q.rear==Q.front
D.(Q.rear+1)%m==Q.front
第4题:
阅读下列函数说明和C函数,将应填入(n)处的字句写在对应栏内。
[说明]
链式存储的队列称为链队。根据队列的FIFO原则,为了操作上的方便,可以使用带头指针front和尾指针rear的单链表来实现链队。若链队元素的数据类型为datatype,则链队结构描述如下:
typedef struct node
{ datatypedata;
structnode *next;
} QNode; /*链队结点的类型*/
typedef struct
{ QNnode *front,*rear;
} LQueue; /*将头尾指针封装在一起的链队*/
以下这种链队的几个例子:
设q是一个指向链队的指针,即LQueue *q。下面各函数的功能说明如下:
(1) LQueue *Init_LQueue():创建并返回一个带头尾结点的空链队;
(2) intEmpty_LQueue( LQueue *q):判断链队q是否空;
(3) void In_LQueue(LQueue *q, datatypex):将数据x压入链队q;
(4) int Out_LQueue(LQuere *q, datatype *x):弹出链队q的第一个元素x,若成功则返回返回1否则返回0。
[函数]
LQueae *Init_LQueue()
{ LQueue *q, *p;
q=malloc(sizeof(LQueue)); /*申请链队指针*/
P=malloc(sized(QNode));/*申请头尾指针结点*/
p->next=NULL;
(1)=p;
return q;
}
int Empty_LQueue(LQueue *q)
{ if(q->front (2) q>rear) return 0;
else return 1;
}
void In_LQueue(LQueue *q, datatype x)
{ QNoda *p;
p=malloc(sizeof(QNnode));/*申请新接点*/
p->data=x;
p->next=NULL;
(3)=p;
q->rear=p;
}
int Out_LQueue(LQueue *q, datatype *x)
{ QNnode *p;
if(Empty_LQueue(q)) return 0; /*队空,操作失败*/
else{
p=q->front->next;
*x=(4);
(5)=p->next;
free(p);
if (q->front->next= =NULL)q->rear=q->front;
return 1;
}
}
第5题:
阅读以下说明和C函数,填补函数代码中的空缺(1)~(5),将解答填入答题纸
的对应栏内。
【说明】
队列是一种常用的数据结构,其特点是先入先出,即元素的插入在表头、删除在表
尾进行。下面采用顺序存储方式实现队列,即利用一组地址连续的存储单元存放队列元
素,同时通过模运算将存储空间看作一个环状结构(称为循环队列)。
设循环队列的存储空间容量为MAXQSIZE,并在其类型定义中设置base、rear和
lengtb三个域变量,其中’base为队列空间的首地址,rear为队尾元素的指针,length表
示队列的长度。
define maxqstze 100
typedef struct {
QElemType *base; /*循环队列的存储空间首地址*/
int rear; /*队尾元素索引*/
int length; /*队列的长度*/
) SqQueue;
例如,容量为8的循环队列如图3-1所示,初始时创建的空队列如图3一l(a)所示
经过一系列的入队、出队操作后,队列的状态如图3-1 (b)所示(队列长度为3)。
下面的C函数1、C函数2和C函数3用于实现队列的创建、插入和删除操作,请
完善这些代码。
【C函数1】创建一个空的循环队列。
int initQueue (SqQueue *Q)
/*创建容量为MAXQSIZE的空队列,若成功则返回1;否则返回0*/
{ Q->base = (QElemType*) malloc(MAXQSIZE* (1) )
if (!Q=>base) return 0;。;
Q->length=O;
Q-’rear =O:
Return 1;
} /*InitQueue*/
【c函数2】元素插入循环队列。
int EnQueue(sqQueue *Q. QElemType e)/*元素e入队,若成功则返回1;否则返回0*/
{if ( Q->length>=MAXQSIZE) return 0.;
Q->rear=(2);
Q->base [Q->rear]=e;
(3) ;
Return 1
) /*EnQUeue*/
【c函数3】元素出循环队列。
int DeQueue (SqQueue *Q. QElemType *e)
/*若队列不空,则删除队头元素,由参数e带回其值并返回1;否则返回O*/
{1f‘(4),return 0;
*e =O->base[ (Q=>rear - Q->length+I+MAXQSTZE) %MAXQSIZE]
(5) ;
returnl;
} /*DeQueue*/
第6题:
第7题:
循环队列sq中,用数组elem存放数据元素,sq.front指示队头元素的前一个位置,sq.rear指示队尾元素的当前位置,队列的最大容量为MAXSIZE,则在队列未满时元素x入队列的主要操作为()。
第8题:
某循环队列的容量MAXSIZE=6,队头指针front=3,队尾指针rear=0,则该队列有()个元素。
第9题:
循环队列的最大存储空间为MaxSize=6,采用少用一个元素空间以有效地判断栈空或栈满,若队头指针front=4,当队尾指针rear=()时队满,队列中共有()个元素。
第10题:
循环队列的队头和队尾指针分别为front和rear,则判断循环队列为空的条件是()。
第11题:
第12题:
front=maxSize
(rear+1)%maxSize=front
rear=maxSize
rear=front
第13题:
阅读下列函数说明和C函数,将应填入(n)处的字句写在对应栏内。
[说明]
循环队列的类型定义如下(其中队列元素的数据类型为datatype):
typedef struct{
datatype data[MAXSIZE]; /*数据的存储区*/
int front,rear; /*队首、队尾指针*/
int num; /*队列中元素的个数*/
}c _ SeQueue; /*循环队*/
下面函数及其功能说明如下:
(1) c_SeQueue* Init_SeQueue():新建队列;
(2) int ln_SeQueue( c_SeQueue *q, datatype x):将元素x插入队列q,若成功返回1否则返回0;
(3) int Out_SeQueue (c_SeQueue *q, datatype *x):取出队列q队首位置的元素,若成功返回1否则返回0。
[函数]
c_SeQueue* Init_SeQueue()
{ q=malloc(sizeof(c_SeQueue));
q->front=q->rear=MAXSIZE-1;
(1);
return q;
}
int In_SeQueue( c_SeQueue *q, datatype x)
{ if(q->num= =MAXSIZE) return 0; /*队满不能入队*/
else {
q->rear=(2);
q->data[q->rear]=x;
(3);
return 1; /*入队完成*/
}
}
int Out_SeQueue( c_SeQueue *q, datatype *x)
{ if (q->num= =0) return 0; /*队空不能出队*/
else{
*x=(4); /*读出队首元素*/
q->front=(5);
q->num- -;
return 1; /*出队完成*/
}
}
第14题:
设数组data[O…m]作为循环队列sq的存储空间,front为队头指针,rear为队尾指针,则执行出队操作的语句为
A.sq↑.front:=sq↑.front+1;
B.sq↑.front:=(sq↑.front+1)%maxsize;
C.sq↑.rear:=(sq↑.rear+1)%maxsize;
D.sq↑.front:=(sq↑.front+1)%(maxsize+1);
第15题:
某循环队列的容量为M,队头指针指向队头元素,队尾指针指向队尾元素之后,如下图所示(M=8),则队列中的元素数目为(41)(MOD表示整除取余运算)。
A.rear-front
B.front-rear
C.(rear-front+M)MODM
D.(front-rear+M)MOD M
第16题:
设循环队列的结构是: const int MaxSize=100; typedef int Data Type; typedef struct { DataType data[MaxSize]; int front, rear; }Queue; 若有一个Queue类型的队列Q,试问判断队列满的条件应是(33)。
A.Q.front=Q.rear;
B.Q.front-Q.rear==MaxSize;
C.Q.front+Q.rear=MaxSize;
D.Q.front==(Q.rear+1)%MaxSize;
第17题:
第18题:
在数组表示的循环队列中,front、rear分别为队列的头、尾指针,maxSize为数组的最大长度,队满的条件是()
第19题:
在循环队列中用数组A[0..m-1]存放队列元素,其队头和队尾指针分别为front和rear,则当前队列中的元素个数是()
第20题:
循环队列sq中,用数组elem存放数据元素,sq.front指示队头元素的前一个位置,sq.rear指示队尾元素的当前位置,队列的最大容量为MAXSIZE,则队列满的条件为()。
第21题:
循环队列的最大存储空间为MaxSize=8,采用少用一个元素空间以有效的判断栈空或栈满,若队头指针front=4,则当队尾指针rear=()时,队列为空,当rear=()时,队列有6个元素。
第22题:
第23题:
sq.front= sq.rear
sq.front= sq.rear+1
(sq.front +1)mod MAXSIZE= sq.rear
(sq.rear+1)mod MAXSIZE= sq.front
第24题:
sq.rear= (sq.rear+1)mod MAXSIZE; sq.elem[sq.rear]=x;
sq.elem[sq.rear]=x; sq.rear= (sq.rear+1)mod MAXSIZE;
sq.front= (sq.front+1)mod MAXSIZE; sq.elem[sq.front]=x;
sq.elem[sq.front]=x; sq.front= sq.front+1;