【数据结构与算法】循环队列 详解

循环队列的数据结构。

struct CircularQueue {
	ElemType a[MaxSize];
	int front, rear;
};

结构体包含三个成员:

  • a 是一个 ElemType 类型的数组,用于存储循环队列的元素。
  • front 是一个整数,表示队列头部元素的前一个位置。
  • rear 是一个整数,表示队列尾部元素的位置。

循环队列的循环是怎样实现的?

循环队列的循环是通过使用模运算实现的。在循环队列中,使用一个固定大小的数组和两个指针(通常称为“头”和“尾”)来表示队列的开始和结束。当头尾指针指向向量上界时,其加1操作的结果是指向向量的下界0。

当向队列添加元素时,会将元素放在尾指针指向的位置,并将尾指针向前移动一位。当尾指针到达数组的末尾时,会将其移动回数组的开始。

bool queueFull(CircularQueue Q) { return ((Q.rear + 1) % MaxSize == Q.front); }

Status queuePush(CircularQueue &Q, ElemType e) {
	if (queueFull(Q)) {
		return ERROR;
	}
	Q.a[Q.rear] = e;
	Q.rear = (Q.rear + 1) % MaxSize;
	return OK;
}

这可以通过对数组大小进行模运算来实现。

rear = (rear + 1) % MAX_SIZE;

同样,当从队列中删除元素时,会将头指针向前移动一位。如果头指针到达数组的末尾,也会将其移动回数组的开始。

bool queueEmpty(CircularQueue Q) { return (Q.front == Q.rear); }

Status queuePop(CircularQueue &Q) {
	if (queueEmpty(Q)) {
		return ERROR;
	}
	Q.front = (Q.front + 1) % MaxSize;
	return OK;
}

这可以通过对数组大小进行模运算来实现。

front = (front + 1) % MAX_SIZE;

通过这种方式,可以使队列在数组中“循环”,即当队列填满数组后,可以从数组的开始重新开始填充,只要队列中还有空位。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值