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):在图算法中,广度优先搜索使用队列来遍历图的节点,保证节点按照距离起始节点的层数依次被访问。
考研机试常用的数据结构 文章被收录于专栏
考研机试常用的数据结构