您的位置:首页 > 其它

循环队列——队列的顺序表示和实现

2009-08-24 19:15 453 查看
上一篇说到队列的链式表示和实现,此次叙述队列的顺序表示和实现且是循环队列。

根据分析可知,在C语言中不能用动态分配的一维数组来实现循环队列。如果用户的应用程序中设有循环队列,则必须为它设定一个最大队列长度;若用户无法预知所用队列的最大程度,则宜采用链式存储。

#define MAXQSIZE 100  //队列最大长度

typedef struct {
QElemType *base;  //初始化动态分配存储空间
int front;
int rear;
}SqQueue;

//循环队列的基本操作的算法描述
Status InitQueue(SqQueue &Q) {
//构造一个空队列
Q.base = (QElemType *) malloc(MAXQSIZE * sizeof(SqQueue));
if(!Q.base) exit(OVERFLOW);
Q.front = Q.rear = 0;
return OK;
}

int QueueLength(SqQueue Q) {
//返回Q的元素个数,即队列的长度
return (Q.rear - Q.front + MAXQSIZE) % MAXQSIZE;
}

Status EnQueue(SqQueue &Q, QElemType e) {
//出入元素e为Q新的队尾元素
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, QElemType &e) {
//若队列不空,则删除Q的对头元素,用e返回其值,并返回OK;
if(Q.front == Q.rear) return ERROR;
e = Q.base[Q.front];
Q.front = (Q.front+1) % MAXQSIZE;
return OK;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: