stack和queue

一、stack

1.概述
stack(栈)是一种先进后出的数据结构。它只有一个出口。所以stack不允许有遍历行为。在缺省的情况下stack以deque作为底层结构。也可以以链表作为底层结构。
在这里插入图片描述
2.stack的一些操作
在这里插入图片描述
3.stack没有迭代器
stack的所有元素都必须符合先进后出的条件,只有stack顶端的元素才会被外界取用。stack不提供遍历功能,也不提供迭代器。

二、queue

1.概述
queue(队列)是一种先进先出的数据结构。它有两个出口,如下图所示。
在缺省的情况下stack以deque作为底层结构。也可以以链表作为底层结构。
在这里插入图片描述

2.queue支持的一些操作
在这里插入图片描述
3.和stack一样,它没有迭代器

### C++ 中 `stack` `queue` 的数据结构定义及用法 #### 定义与特性 在 C++ 标准库 `<stack>` `<queue>` 中,`std::stack` 是一种后进先出(LIFO, Last In First Out)的数据结构,而 `std::queue` 则是一种先进先出(FIFO, First In First Out)的数据结构。这两种容器适配器都基于其他标准容器(如 `std::deque` 或 `std::list`)来实现。 对于 `std::stack` 而言,默认底层容器为 `std::deque`[^1]。它提供了三个主要的操作函数:`push()` 用于向栈顶添加元素;`pop()` 用于移除栈顶元素;以及 `top()` 返回当前栈顶的元素值[^3]。 而对于 `std::queue` 来说,默认同样使用 `std::deque` 作为底层容器[^2]。它的基本操作包括:`push()` 将新元素加入到队列尾部;`front()` 获取队首元素;`back()` 获取队尾元素;以及通过调用 `pop()` 移除队首元素。 #### 使用方法对比 以下是两种数据结构的具体使用示例: ##### Stack 示例代码 ```cpp #include <iostream> #include <stack> using namespace std; int main() { stack<int> stk; stk.push(1); stk.push(2); stk.push(3); while (!stk.empty()) { cout << stk.top() << " "; // 输出顺序应为 3 2 1 stk.pop(); } return 0; } ``` ##### Queue 示例代码 ```cpp #include <iostream> #include <queue> using namespace std; int main() { queue<int> que; que.push(1); que.push(2); que.push(3); while (!que.empty()) { cout << que.front() << " "; // 输出顺序应为 1 2 3 que.pop(); } return 0; } ``` 上述两段程序分别展示了如何利用 `std::stack` 实现 LIFO 行为借助 `std::queue` 达成 FIFO 效果。 #### 主要区别总结 - **访问模式**: `std::stack` 只允许在一端进行插入删除操作,即遵循 LIFO 原则;相反地,`std::queue` 支持两端操作——一端入队另一端出队,体现 FIFO 特征。 - **功能范围**: 鉴于其单侧受限的特点,`std::stack` 更适合解决那些需要逆序处理或者递归模拟场景下的问题;而当面对诸如广度优先搜索(BFS)之类需按层次遍历的任务时,则更适合选用 `std::queue`[^4]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值