c++队列
1. 队列的定义与概念
队列(Queue)是一种遵循先进先出(First - In - First - Out,FIFO)原则的线性数据结构。就像日常生活中人们排队等待服务,先到达队列的元素会先被处理,后到达的元素需要在队列尾部等待。在队列中,元素的插入操作在队尾进行,而删除操作在队头进行。
2. 队列的常见操作
- 入队(Enqueue):将一个新元素添加到队列的尾部。
- 出队(Dequeue):移除并返回队列头部的元素。
- 查看队头元素(Front):返回队列头部的元素,但不将其从队列中移除。
- 判断队列是否为空(IsEmpty):检查队列中是否有元素。
- 获取队列元素数量(Size):返回队列中当前元素的个数。
3. 队列的C++实现方式
3.1 使用数组实现队列
以下是一个简单的使用数组实现的队列类:
#include <iostream>
const int MAX_SIZE = 100;
class ArrayQueue {
private:
int queue[MAX_SIZE];
int front;
int rear;
int size;
public:
ArrayQueue() : front(0), rear(0), size(0) {}
// 入队操作
void enqueue(int item) {
if (size == MAX_SIZE) {
std::cout << "队列已满,无法入队!" << std::endl;
return;
}
queue[rear] = item;
rear = (rear + 1) % MAX_SIZE;
size++;
}
// 出队操作
int dequeue() {
if (isEmpty()) {
std::cout << "队列为空,无法出队!" << std::endl;
return -1;
}
int item = queue[front];
front = (front + 1) % MAX_SIZE;
size--;
return item;
}
// 查看队头元素
int frontElement() {
if (isEmpty()) {
std::cout << "队列为空!" << std::endl;
return -1;
}
return queue[front];
}
// 判断队列是否为空
bool isEmpty() {
return size == 0;
}
// 获取队列元素数量
int getSize() {
return size;
}
};
你可以使用以下方式调用这个队列类:
int main() {
ArrayQueue q;
q.enqueue(1);
q.enqueue(2);
q.enqueue(3);
std::cout << "队头元素: " << q.frontElement() << std::endl;
std::cout << "出队元素: " << q.dequeue() << std::endl;
std::cout << "当前队列大小: " << q.getSize() << std::endl;
return 0;
}
这里使用取模运算 % 来实现循环队列,避免了数组空间的浪费。
3.2 使用标准库 std::queue
C++ 标准库 <queue> 中提供了 std::queue 容器适配器,它基于其他容器(如 std::deque 或 std::list)实现,使用起来更加方便:
#include <iostream>
#include <queue>
int main() {
std::queue<int> q;
// 入队操作
q.push(1);
q.push(2);
q.push(3);
// 查看队头元素
std::cout << "队头元素: " << q.front() << std::endl;
// 出队操作
q.pop();
std::cout << "出队后队头元素: " << q.front() << std::endl;
// 获取队列元素数量
std::cout << "当前队列大小: " << q.size() << std::endl;
// 判断队列是否为空
std::cout << "队列是否为空: " << (q.empty() ? "是" : "否") << std::endl;
return 0;
}
std::queue 提供了 push() 用于入队,pop() 用于出队,front() 查看队头元素,size() 获取队列大小,empty() 判断队列是否为空等操作。
4. 队列的应用场景
- 任务调度:在操作系统中,任务队列用于管理待执行的任务,按照任务到达的顺序依次执行。
- 消息传递:在网络编程中,消息队列用于存储和传递消息,确保消息按照发送的顺序被接收和处理。
- 广度优先搜索(BFS):在图算法中,广度优先搜索使用队列来遍历图的节点,保证节点按照距离起始节点的层数依次被访问。
考研机试常用的数据结构 文章被收录于专栏
考研机试常用的数据结构
