//队列的顺序表示
#define MAXQSIZE 100 // 最大队列长度
Typedef struct {
QelemType *base; //初始化的动态分配存储空间
int front; //头指针
int rear; //尾指针
} SqQueue;
//循环队列的初始化
Status InitQueue(SqQueue &Q){
Q.base = (QElmType*)malloc(MAXQSIZE*sizeof(QElmType)); //分配数组空间
if(!Q>base) exit(OVERFLOW); //存储分配失败
Q.front=Q.rear=0;
return OK;
}
//求循环队列的长度
int QueueLength(SqQueue Q){
return (Q.rear-Q.front+MAXQSIZE)%MAXQSIZE;
}
//循环队列入队
Status EnQueue(SqQueue &Q,QElemType){
if((Q.rear+1)%MAXQSIZE == Q.front) return ERROR; //队满
Q.base[Q.rear]=e;
Q.rear = (Q.rear+1)%MAXQSIZE;
return OK;
}
//循环队列出队
Status DeQueue(SqQueue &Q,QelmType &e){
if(Q.front==Q.rear) return ERROR; //队空
e=Q.base[Q.front]; //保存队头元素
Q.front = (Q.front+1)%MAXQSIZE; //队头指针+1
return OK;
}
//循环队列取队头元素
SElemType GetHead(SqQueue Q){
if(Q.front!=Q.rear) //队列不为空
return Q.base[Q.front]; //返回队头指针元素的值 对头指针不变
}