【C++】-stack和queue的具体使用以及模拟实现(dqeue的介绍+容器适配器的介绍)
发布人:shili8
发布时间:2025-01-31 05:07
阅读次数:0
**栈和队列的基本概念**
在计算机科学中,栈和队列是两种常见的数据结构,它们都用于存储和管理元素的顺序。下面我们将分别介绍栈和队列的基本概念,以及它们在C++中的实现。
### 栈**定义**
栈是一种后进先出的数据结构,表示为LIFO(Last In First Out)。这意味着最后添加的元素将首先被移除。
**操作**
栈支持以下基本操作:
* `push(element)`: 将一个新元素添加到栈顶。
* `pop()`: 移除并返回栈顶元素。
* `top()`: 返回栈顶元素(但不移除)。
* `empty()`: 检查栈是否为空。
### 队列**定义**
队列是一种先进先出的数据结构,表示为FIFO(First In First Out)。这意味着最先添加的元素将首先被移除。
**操作**
队列支持以下基本操作:
* `enqueue(element)`: 将一个新元素添加到队尾。
* `dequeue()`: 移除并返回队头元素。
* `front()`: 返回队头元素(但不移除)。
* `empty()`: 检查队列是否为空。
**C++中的实现**
在C++中,我们可以使用标准库提供的`stack`和`queue`类来模拟栈和队列的行为。这些类都是容器适配器,基于底层的序列容器(如`vector`)实现。
### 栈的实现
cpp#include <iostream> #include <vector> class Stack { private: std::vector<int> elements; public: void push(int element) { // 将新元素添加到栈顶 elements.push_back(element); } int pop() { if (empty()) { throw std::out_of_range("Stack is empty"); } int top = elements.back(); elements.pop_back(); return top; } int top() const { if (empty()) { throw std::out_of_range("Stack is empty"); } return elements.back(); } bool empty() const { return elements.empty(); } };
### 队列的实现
cpp#include <iostream> #include <vector> class Queue { private: std::vector<int> elements; public: void enqueue(int element) { // 将新元素添加到队尾 elements.push_back(element); } int dequeue() { if (empty()) { throw std::out_of_range("Queue is empty"); } int front = elements.front(); elements.erase(elements.begin()); return front; } int front() const { if (empty()) { throw std::out_of_range("Queue is empty"); } return elements.front(); } bool empty() const { return elements.empty(); } };
**容器适配器的介绍**
C++标准库提供了多种容器适配器,用于简化数据结构的实现。这些容器适配器基于底层的序列容器(如`vector`)或关联容器(如`map`)实现。
* `stack`: 基于`deque`实现的栈容器。
* `queue`: 基于`deque`实现的队列容器。
* `priority_queue`: 基于`heap`实现的优先级队列容器。
这些容器适配器提供了高层次的接口,使得开发者可以轻松地使用它们,而无需关注底层数据结构的实现细节。