您的位置:首页 > 理论基础 > 数据结构算法

数据结构:循环队列(二)

2014-04-27 11:40 253 查看
 假设将循环队列定义为:以域变量rear和length分别指示循环队列中队尾元素的位置和内含元素的个数。试给出此循环队列的队满条件,并写出相应的入队列和出队列的算法。

循环队列CLenQueue的类型定义如下:
typedef char QElemType;
typedef struct {
QElemType elem[MAXQSIZE];
int length;
int rear;
} CLenQueue;

实现函数如下:

Status EnCQueue(CLenQueue &Q, QElemType x)
{
if(Q.length == MAXQSIZE){
return ERROR;//循环队列满
}
if(MAXQSIZE - 1 != Q.rear){
++Q.rear;
Q.elem[Q.rear] = x;
}
else{//rear指向循环队列的末尾时,作特殊处理使其构成循环
Q.rear = 0;
Q.elem[Q.rear] = x;
}
++Q.length;//当前元素个数+1
return OK;
}

Status DeCQueue(CLenQueue &Q, QElemType &x)
{
if(!Q.length){
return ERROR;//循环队列空
}
if(Q.rear + 1 >= Q.length){//当rear的下标大于对头指向的下标时
x = Q.elem[Q.rear + 1 - Q.length];
}
else{//当rear的下标小于队头下标时
x = Q.elem[MAXQSIZE + Q.rear + 1 - Q.length];
}
--Q.length;//当前元素个数-1
return OK;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息