数据结构-----循环队列

循环队列类型模块说明:

// ----- 循环队列——队列的顺序存储结构 -----
# 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 无法判断队列空间是"空“还是“满”,因此,少用一个元素空间,约定以“对队列头指针在队列尾指针的下一位置(指环状的下一位置)上”作为队列呈“满”状态的标志。

循环队列需要为它设定一个最大队列长度,若用户无法预估所用队列的最大长度,则宜采用链队列。


  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值