閱讀以下說明和C函數,填補函數代碼中的空缺(1)~(5),將解答填入答題紙的對應欄內。
【說明】
隊列是一種常用的數據結構,其特點是先入先出,即元素的插入在表頭、刪除在表尾進行。下面采用順序存儲方式實現隊列,即利用一組地址連續(xù)的存儲單元存放隊列元素,同時通過模運算將存儲空間看作一個環(huán)狀結構(稱為循環(huán)隊列)。
設循環(huán)隊列的存儲空間容量為MAXQSIZE,并在其類型定義中設置base、rear和length三個域變量,其中,base為隊列空間的首地址,rear為隊尾元素的指針,length表示隊列的長度。
#define MAXQSIZE 100
typedef struct {
QElemType *base; /* 循環(huán)隊列的存儲空間首地址 */
int rear; /* 隊尾元素索引 */
int length; /* 隊列的長度 */
} SqQueue;
例如,容量為8的循環(huán)隊列如圖3-1所示,初始時創(chuàng)建的空隊列如圖3-1(a)所示,經過一系列的入隊、出隊操作后,隊列的狀態(tài)如圖3-1(b)所示(隊列長度為3)。
圖3-1
下面的C函數1、C函數2和C函數3用于實現隊列的創(chuàng)建、插入和刪除操作,請完善這些代碼。
【C函數1】創(chuàng)建一個空的循環(huán)隊列。
int InitQueue(SqQueue *Q)
/* 創(chuàng)建容量為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】元素插入循環(huán)隊列。
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】元素出循環(huán)隊列。
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 */