本文共 1044 字,大约阅读时间需要 3 分钟。
循环队列类型模块说明:
// ----- 循环队列——队列的顺序存储结构 -----# define MAXQSIZE 100 // 最大队列长度typedef struct { QElemType *base; // 初始化的动态分配存储空间 int front; // 头指针,若队列不空,指向队列头元素 int rear; // 尾指针,若队列不空,指向队列尾元素的下一个元素} SqQueue;// ----- 循环队列的基本操作的算法描述 -----Status InitQueue (SqQueue &Q) { // 构造一个空队列Q Q.base = (QElemType *) malloc (MAXQSIZE * sizeof (QElemType)); 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;否则返回ERROR if (Q.front == Q.rear) return ERROR; e = Q.base[Q.front]; Q.front = (Q.front + 1) % MAXQSIZE; return OK;}
由于只凭等式 Q.front = Q.rear 无法判断队列空间是"空“还是“满”,因此,少用一个元素空间,约定以“对队列头指针在队列尾指针的下一位置(指环状的下一位置)上”作为队列呈“满”状态的标志。
循环队列需要为它设定一个最大队列长度,若用户无法预估所用队列的最大长度,则宜采用链队列。
转载地址:http://ttvrn.baihongyu.com/