目录
一、循环队列的初始化
1、算法描述
Status InitQueue (SqQueue &Q){
Q.base=new QElemType[MAXQSIZE] //分配数组空间 或者用C语言Q.base=(QElemType*)malloc(MAXQSIZE*sizeof(QElemType));
if(!Q.base) exit(OVERFLOW); //存储分配失败
Q.front=Q.rear=0; //头指针尾指针置为0,队列为空
return OK;
}
二、循环队列求队列长度
1、算法描述
int QueueLength (SqQueue Q){
return ( Q.rear-Q.front+ MAXQSIZE)%MAXQSIZE );
}
2、由于下图三种头指针和尾指针的不同情况,所以求队列长度不能将头指针和尾指针单一的相减就行。
三、循环队列入队
1、算法描述
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; //队头指针加一
return оK;
}
由三、四可以看出队头指针和队尾指针加一,在循环队列中的语句并不是简单的加一操作。
五、循环队列取队头元素
SElemType GetHead(SqQuere Q){
if(Q.front!=Q.rear) //队列不为空
return Q.base[Q.front]; //返回队头指针元素的值,队头指针不变
}


7726

被折叠的 条评论
为什么被折叠?



