当前位置:实例文章 » 其他实例» [文章]【C++】-stack和queue的具体使用以及模拟实现(dqeue的介绍+容器适配器的介绍)

【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`实现的优先级队列容器。

这些容器适配器提供了高层次的接口,使得开发者可以轻松地使用它们,而无需关注底层数据结构的实现细节。

相关标签:c++容器开发语言
其他信息

其他资源

Top