实现一个简单的环形队列
文章目录
一、什么是环形队列?
环形队列的定义
环形队列(Circular Queue)是一种特殊的数据结构,旨在高效地管理和利用存储空间。与传统的线性队列相比,环形队列的主要特点在于,它的队尾和队头可以在同一存储空间中循环使用,从而避免了空间浪费。
环形队列的原理
-
数据结构:
- 环形队列通常使用一个固定大小的数组来存储元素。
- 定义两个指针:
- front:指向队头元素的位置。
- rear:指向队尾元素的下一个位置。
-
容量:
- 最大容量通常比数组的大小少一个,以便能够区分空队列和满队列的状态。这是因为当
front和rear相等时,队列被认为是空的,而当(rear + 1) % maxSize == front时,队列被认为是满的。
- 最大容量通常比数组的大小少一个,以便能够区分空队列和满队列的状态。这是因为当
-
入队(enqueue):
- 将新元素添加到
rear指向的位置,然后更新rear指针为(rear + 1) % maxSize。如果rear指针达到数组的末尾,它将重新回到数组的起始位置。
- 将新元素添加到
-
出队(dequeue):
- 从
front指向的位置移除元素,然后更新front指针为(front + 1) % maxSize。同样,front指针在到达数组末尾时会循环回到开头。
- 从
-
判断队列状态:
- 空队列:当
front和rear相等时,队列为空。 - 满队列:当
(rear + 1) % maxSize == front时,队列满。
- 空队列:当
二、环形队列功能实现
1.构造初始化
// 构造函数,初始化队列大小
CircularQueue(int size) : maxSize(size + 1), front(0), rear(0)
{
data.resize(maxSize); // 根据最大大小调整数据存储空间
}
2.入队操作
// 入队操作
bool enqueue(const T &item)
{
if (isFull()) // 检查队列是否已满
{
throw std::runtime_error("Queue is full!"); // 抛出异常
return false; // 这个返回语句不会被执行
}
data[rear] = item; // 将新元素放入队尾
rear = (rear + 1) % maxSize; // 更新队尾指针
return true; // 入队成功
}
3.出队操作
// 出队操作
bool

最低0.47元/天 解锁文章
656

被折叠的 条评论
为什么被折叠?



