循环队列的操作——队列的初始化
Status InitQueue (SqQueue &Q){
Q.base =new QElemType[MAXQSIZE] //分配数组空间
//Q.base =(QElemType*)
//malloc(MAXQSIZE*sizeof(QElemType));
if(!Q.base) exit(OVERFLOW); //存储分配失败
Q.front = Q.rear = 0; //头指针尾指针置为0,队列为空
return OK;
}
循环队列的操作——队列的长度
int QueueLength(SqQueue Q){
return ((Q.rear - Q.front + MAXQSIZE)%MAXSIZE);
}
循环队列的操作——循环队列入队
Status EnQueue(SqQueue &Q,QElemType e){
if((Q.rear+1)%MAXQSIZE==Q.front) return ERROR;//队满
Q.base[Q.rear]=e; //新元素加入队尾
Q.rear=(Q.rear+1)%MAXQSIZE; //队尾指针+1
return OK;
}
循环队列的操作——循环队列出队
Status DeQueue(SqQueue &Q,QElemType &e){
if(Q.front==Q.rear)return ERROR; //队空
e=Q.base[Q.front]; //保存队头元素
Q.front=(Q.front+1)%MAXQSIZE; //队头指针+1
return OK;
}
循环队列的操作——取队头元素
SElemType GetHead(SqQuere Q){
if(Q.front!=Q.rear) //队列不为空
return Q.base[Q.front]; //返回队头指针元素的值,队头指针不变
}