news 2026/5/4 23:54:20

[特殊字符] 栈与队列基础知识全面解析

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
[特殊字符] 栈与队列基础知识全面解析

一、栈(Stack)理论基础

1.1 栈的基本特性

栈是一种后进先出(LIFO, Last In First Out)的数据结构,操作只在栈顶进行。

// 栈的基本操作stack<int>st;st.push(1);// 入栈st.push(2);inttop=st.top();// 查看栈顶元素:2st.pop();// 出栈,移除2boolempty=st.empty();// 判断栈是否为空

1.2 C++中栈的实现原理

重要概念:栈在C++中不是容器,而是容器适配器(container adapter)

// C++中栈的底层实现std::stack<int>st1;// 默认使用deque作为底层容器std::stack<int,std::vector<int>>st2;// 指定vector作为底层容器std::stack<int,std::list<int>>st3;// 指定list作为底层容器

栈的底层容器选择

  • deque(默认):双向队列,内存非连续
  • vector:动态数组,内存连续
  • list:双向链表,内存非连续

1.3 STL栈的实现版本

STL版本特点使用场景
HP STL第一个实现版本,开源历史学习
PJ.Plauger STLVisual C++采用,不开源Windows开发
SGI STLGCC采用,开源,可读性高Linux开发

SGI STL中栈的关键特性

  • 不提供迭代器(不能遍历)
  • 不支持随机访问
  • 对外提供统一接口,底层可插拔

二、队列(Queue)理论基础

2.1 队列的基本特性

队列是一种先进先出(FIFO, First In First Out)的数据结构。

// 队列的基本操作queue<int>q;q.push(1);// 入队q.push(2);intfront=q.front();// 查看队首元素:1q.pop();// 出队,移除1boolempty=q.empty();// 判断队列是否为空

2.2 C++中队列的实现原理

队列也是容器适配器

// C++中队列的底层实现std::queue<int>q1;// 默认使用deque作为底层容器std::queue<int,std::list<int>>q2;// 指定list作为底层容器

队列的底层容器要求

  • 必须支持push_back()(入队)
  • 必须支持pop_front()(出队)
  • 必须支持front()(查看队首)

2.3 常见问题解答

Q1:栈/队列是容器吗?
A:不是。它们是容器适配器,底层使用其他容器实现。

Q2:栈/队列支持遍历吗?
A:不支持。它们不提供迭代器,只能通过pop()逐个访问。

Q3:栈/队列在内存中连续吗?
A:取决于底层容器。默认用deque,内存不连续;如果用vector则连续。


三、栈与队列的相互实现

3.1 用栈实现队列(LeetCode 232)

classMyQueue{private:stack<int>stIn;// 输入栈stack<int>stOut;// 输出栈public:MyQueue(){}// 入队:直接压入输入栈voidpush(intx){stIn.push(x);}// 出队intpop(){// 如果输出栈为空,把输入栈所有元素导入if(stOut.empty()){while(!stIn.empty()){stOut.push(stIn.top(
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/4 22:31:39

代码不是我的全部:一个测试人的精神成长史

第一章 二进制牢笼&#xff1a;测试工具人的觉醒 当我的工作日报第387次出现“执行用例200条&#xff0c;提交缺陷15个”时&#xff0c;鼠标在提交按钮上突然僵住。屏幕上密密麻麻的测试脚本像藤蔓缠住思维——这就是职业巅峰吗&#xff1f;2018年全民拥抱敏捷开发的时代&…

作者头像 李华
网站建设 2026/5/3 11:44:21

web渗透测试学习路线,web渗透测试是什么?

web渗透学习路线 文章目录 *web渗透学习路线*前言一、web渗透测试是什么&#xff1f;二、web渗透步骤 1.前期工作2.中期提高3.后期打牢 总结 前言 本文整理的学习路线&#xff0c;清晰明了&#xff0c;重点分明&#xff0c;能快速上手实践&#xff0c;相信想学的同学们都能轻…

作者头像 李华
网站建设 2026/4/27 22:19:58

ISO 11452-4:大电流注入BCI,从原理到校准

01 为什么你的车机在5G信号下依然稳定&#xff1f; 随着智能汽车的发展&#xff0c;车载电子面临的电磁干扰&#xff08;EMI&#xff09;越来越复杂——从高压电线的低频噪声&#xff0c;到5G/雷达的高频辐射&#xff0c;如何确保系统稳定&#xff1f;ISO 11452-4 标准给出了…

作者头像 李华
网站建设 2026/5/1 8:29:24

java_ssm2家用二手电器回收系统

目录具体实现截图家用二手电器回收系统摘要系统所用技术介绍写作提纲源码文档获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01;具体实现截图 家用二手电器回收系统摘要 随着电子产品更新迭代速度加快&#xff0c;大量二手电器被闲置或废弃&…

作者头像 李华
网站建设 2026/4/27 22:19:55

java_ssm7特产农产品网上商城的设计与实现_idea项目源码

目录 具体实现截图项目背景与意义技术架构核心功能模块创新点与优势应用价值 系统所用技术介绍写作提纲源码文档获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01; 具体实现截图 项目背景与意义 随着互联网技术的发展和农村电商的兴起&#xff0…

作者头像 李华
网站建设 2026/5/1 5:04:48

621-0010模拟输出模块

621-0010 模拟输出模块621-0010 是工业自动化系统中的 模拟输出模块&#xff0c;用于将控制系统的数字控制信号转换为现场可执行的连续模拟信号&#xff0c;以驱动阀门、变频器、执行器等设备。模块作用该模块位于控制系统与现场设备之间&#xff0c;将处理器或逻辑控制单元生成…

作者头像 李华