循环队列的操作——队列的初始化


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];	//返回队头指针元素的值,队头指针不变

}