阅读以下说明和C函数,填补函数代码中的空缺(1)~(5)。
队列是一种常用的数据结构,其特点是先入先出,即元素的插入在表头、删除在表尾进行。下面采用顺序存储方式实现队列,即利用一组地址连续的存储单元存放队列元素,同时通过模运算将存储空间看作一个环状结构(称为循环队列)。
设循环队列的存储空间容量为 MAXQSIZE,并在其类型定义中设置base、rear和 length三个域变量,其中,base为队列空间的首地址,rear为队尾元素的指针, length表示队列的长度。
#define MAXQSIZE 100
typedef struct{
QElemType *base;/*循环队列的存储空间首地址*
int real;/*队尾元素索引*/
int ength;/*队列的长度*/
} SqQueue;
例如,容量为8的循环队列如下图所示,初始时创建的空队列如图(a)所示,经过一系列的入队、出队操作后,队列的状态如图(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=0;
Q->rear =0;
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;否则返回0*/
if(__(4)__)return 0;
*e=Q-base[(Q->rear-Q->length+1+MAXQSIZE)%MAXQSIZE];
__(5)__;
return 1;
}/*DeQueue*/