stack和queue的使用

前言

前面我们对string、vector、list做了介绍并对底层进行了实现!本期我们继续来介绍STL容器,stack和queue!

本期内容介绍

stack 常用接口的介绍

queue 常用接口的介绍

什么是stack?

这里的栈和我们C语言实现的数据结构的那个栈功能是一样的!栈是一种支持在一端进行插入和删除的顺序容器,遵循" 后进先出(LIFO)"的原则!库里面也说了它是一种容器适配器!什么是容器适配器,这里先不做介绍,等下一期模拟实现的时候再来详细介绍,本期只介绍如何使用!

常用接口介绍

empty

判断栈是否为空

size

获取栈里面的元素个数

top

获取栈顶元素(的引用)

push

在栈顶插入一个元素

pop

删除栈顶元素

OK,这就是栈的常用接口!很简单,我下面来演试一下:

void stack_test1()
{stack<int> st;st.push(1);st.push(2);st.push(3);st.push(4);st.push(5);bool emp = st.empty();cout << "empty : " << emp << endl;size_t sz = st.size();cout << "size : " << sz << endl;int top = st.top();cout << "top : " << top << endl;st.pop();top = st.top();cout << "top : " << top << endl;
}

OK,我们来做一道OJ来用一下stack吧!

最小栈

这道题让你实现一个最小元素的栈,每次可以用常量级别的时间复杂度获取当前栈中的最小元素!

这里用一个栈肯定是不行的!一个栈遍历的话不符合人家的常量级别的时间复杂度!既然一个栈不可以,那我们搞两个栈一个存当前栈的数据域,一个存当前栈里面的的最小元素!

如果普通栈为空或当前元素比普通栈的栈顶元素小得话插入到最小栈!

OK,我先画个图,走一遍刚刚的思路:

OK,我们实现一下:

class MinStack 
{
public:MinStack() {}void push(int val) {_elem.push(val);if(_min.empty() || val <= _min.top())//普通栈为空或当前元素比普通栈顶元素小,入最小栈_min.push(val);}void pop() {if(_min.top() == _elem.top())//如果普通栈的栈顶元素和最小栈相同,也要删最小栈的元素_min.pop();_elem.pop();}int top() {return _elem.top();//返回普通栈的栈顶元素}int getMin() {return _min.top();//获取最小栈的栈顶元素}private:stack<int> _elem;//普通栈stack<int> _min;//最小栈
};

OK,栈就介绍到这里,下面我们来看看队列!

什么是queue?

和栈一样这里的队列和我们数据结构那里的一样!队列是一种支持在尾部插入和在头部删除的线性容器!遵循"先进先出(FIFO)"的原则!不过这个的底层是带头双向循环链表!

这里他还是适配器,暂时不介绍,下一期模拟实现在介绍!

常用接口介绍

empty

判断队列是否为空

size

获取队列中的元素个数

front

获取队头元素(的引用)

back

获取队尾元素(的引用)

push

在队尾插入一个元素

pop

删除队头的数据

OK,队列的接口就这么多,也是很简单的!下面还是举个例子:

void queue_test1()
{queue<int> q;q.push(1);q.push(2);q.push(3);q.push(4);q.push(5);bool emp = q.empty();cout << "empty : " << emp << endl;size_t sz = q.size();cout << "size : " << sz << endl;int front = q.front();cout << "front : " << front << endl;int back = q.back();cout << "back : " << back << endl;q.pop();sz = q.size();cout << "size : " << sz << endl;
}

OK,这里对列这了有纯队列的题,他一般是作为算法的辅助工具的!经典的就是BFS!后面遇到了在介绍!

结束语: 路在自己脚下,没有人可以决定我的方向。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/801236.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

leetcode代码记录(最长连续递增序列

目录 1. 题目&#xff1a;2. 我的代码&#xff1a;小结&#xff1a; 1. 题目&#xff1a; 给定一个未经排序的整数数组&#xff0c;找到最长且 连续递增的子序列&#xff0c;并返回该序列的长度。 连续递增的子序列 可以由两个下标 l 和 r&#xff08;l < r&#xff09;确定…

如何查看当前python环境的安装路径

起因&#xff1a;在查看python安装路径时&#xff0c;由于环境变量未添加&#xff0c;导致直接用python无法查看&#xff0c;但是pip又可用。因此找到另外一种代替方法。 利用pip show 库 pip show numpy

代码随想录第34天| 1005.K次取反后最大化的数组和 134. 加油站 135. 分发糖果

1005.K次取反后最大化的数组和 1005. K 次取反后最大化的数组和 - 力扣&#xff08;LeetCode&#xff09; 代码随想录 (programmercarl.com) 贪心算法&#xff0c;这不就是常识&#xff1f;还能叫贪心&#xff1f;LeetCode&#xff1a;1005.K次取反后最大化的数组和_哔哩哔…

德兰梅尔:耐高温热销的膜元件亮相2024上海国际生物发酵展

德兰梅尔&#xff1a;耐高温热销的膜元件盛装亮相2024上海国际生物发酵展&#xff0c;8月7-9号上海新国际博览中心与您不见不散&#xff01; 据了解&#xff0c;从成立至今&#xff0c;德兰梅尔一直专注膜技术、膜产品的开发生产。在中国市场上&#xff0c;德兰梅尔刚步入中国…

共享门店模式:一种资源优化的创新合伙人机制

共享门店模式&#xff0c;亦被称为“共享股东”模式&#xff0c;是一种创新的合伙人机制。它运用新颖的思维、方式及系统&#xff0c;吸引并集结拥有资源和能力的人才&#xff0c;共同合作&#xff0c;并使他们转变为门店的分红股东。 这一模式的核心在于门店资源的共享&#x…

(css)el-tag标签,el-select多选框,el-cascader级联选框自定义样式

(css)el-tag标签&#xff0c;el-select多选框&#xff0c;el-cascader级联选框自定义样式 css: :root {--button-color: #065de0; }// 标签 .tagNew {margin-right: 20px;border-radius: 20px; }.el-tag.el-tag--info {background-color: var(--button-color);border-color: v…

字符串匹配算法之BF与KMP算法

目录 BF算法(暴力匹配算法) KMP算法 核心思想&#xff1a; next数组 next数组的优化 BF算法(暴力匹配算法) #include <assert.h> int BF(const char* str, const char* sub) {assert(str ! NULL && sub ! NULL);if (str NULL || sub NULL){return -1;}int…

MySQL学习笔记(二)

1、把查询结果中去除重复记录 2、连接查询 从一张表中单独查询&#xff0c;称为单表查询。emp表和dept表联合起来查询数据&#xff0c;从emp表中取员工名字&#xff0c;从dept表中取部门名字&#xff0c;这种跨表查询&#xff0c;多张表联合起来查询数据&#xff0c;被称为连…

深入理解计算机系统 家庭作业 2.84

这题没有这个要求所以可以用 ? > : < 这种运算 以下代码用的是位级运算.因为我误解了题意 呜呜呜 想看用判断的代码请自行百度 ((((ux<<9>>9)<<((ux<<1>>24)-127)) - ((uy<<9>>9)<<((uy<<1>>24)-127)))>…

【攻防世界】ics-05(PHP伪协议+代码审计+Linux指令)

首先根据题目提示&#xff0c;进入云平台设备维护中心页面&#xff1a; 页面无异常&#xff0c;检查源代码&#xff1a; 发现注入点 ?page&#xff0c;大致有如下思路&#xff1a;1、SSTI模板引擎漏洞&#xff1b;2、XXS&#xff1b;3、PHP伪协议。 首先尝试SSTI漏洞&#xf…

市场复盘总结 20240408

仅用于记录当天的市场情况&#xff0c;用于统计交易策略的适用情况&#xff0c;以便程序回测 短线核心&#xff1a;不参与任何级别的调整&#xff0c;采用龙空龙模式 一支股票 10%的时候可以操作&#xff0c; 90%的时间适合空仓等待 二进三&#xff1a; 进级率 33% 最常用的…

数据结构__顺序表

概念及结构 顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构&#xff0c;一般情况下采用数组存储。在数组上完成数据的增删查改 需要用到数组&#xff1a;数组的绝对优势&#xff1a;下标的随机访问&#xff08;因为物理空间连续&#xff09; a[i]等…

NatCross实现NASCAB云可云内网穿透指南

一、简介 1、NAS_CAB介绍 跨平台NAS软件,远程管理照片,影音和文件&#xff0c;无需专用设备,个人版永久免费。官网地址&#xff1a;https://www.nascab.cn/。 2、NatCross介绍 NatCross是内网穿透工具,也是免费的端口映射和DDNS动态域名解析软件。软件从2021年上线以来&…

10.枚举

1.背景及定义 枚举是在JDK1.5以后引入的。 主要用途是&#xff1a; 将一组常量组织起来&#xff0c; 在这之前表示一组常量通常使用定义常量的方式&#xff1a; public static final int RED 1; public static final int GREEN 2; public static final int BLACK 3; 但是…

2005-2023年各省国内生产总值指数分季度数据

2005-2023年各省国内生产总值指数分季度数据 1、时间&#xff1a;2005-2023年 2、来源&#xff1a;国家统计局、各省统计局 3、指标&#xff1a;地区生产总值指数(上年同期100)_累计值(%) 4、范围&#xff1a;31省 5、时间跨度&#xff1a;季度 6、缺失情况&#xff1a;无…

Redis 主从复制、哨兵模式、Cluster集群

目录 一、Redis 主从复制 1、主从复制介绍 2、主从复制的作用 3、主从复制流程&#xff1a; 4、搭建redis主从复制 4.1所有服务器搭建redis数据库 4.2修改Redis配置文件&#xff08;Master节点操作&#xff09; ​4.3修改Redis配置文件&#xff08;slave节点操作&#x…

【C++】详解 Unique 函数 (小白一看就懂!!!)

目录 一、前言 二、去重函数 Unique() ✨头文件 ✨用法与作用 ✨注意点 三、常考面试题 四、共勉 一、前言 经常刷算法题的朋友&#xff0c;肯定会经常看到题目中提到 去重 这样的字眼&#xff0c;或者需要我们通过 去重 来解题&#xff0c;由于之前对 去重 了解的不太清楚…

LinkedHashMap 集合源码分析

LinkedHashMap 集合源码分析 文章目录 LinkedHashMap 集合源码分析一、字段分析二、内部类分析三、构造方法分析四、内部方法分析五、总结 LinkedHashMap 是 HashMap 的子类&#xff0c;在 HashMap 的基础上维护了双向链表&#xff0c;保证了有序性。默认是不排序的&#xff0c…

JavaScript模块化开发的前世今生

一个兜兜转转&#xff0c;从“北深”回到三线城市的小码农&#xff0c;热爱生活&#xff0c;热爱技术&#xff0c;在这里和大家分享一个技术人员的点点滴滴。欢迎大家关注我的微信公众号&#xff1a;果冻想 前言 现代化的编程语言&#xff0c;基本都支持模块化的开发&#xff…

Transformer算法详解

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f366; 参考文章&#xff1a;TensorFlow入门实战&#xff5c;第3周&#xff1a;天气识别&#x1f356; 原作者&#xff1a;K同学啊|接辅导、项目定制 一、文本输入人类理解 词向量&#xff08;E…