[C++随笔录] stack queue使用

stack && queue使用

  • stack
  • queue
  • 题目训练

stack

栈的特点是 先进后出(first in last out)

我们可以看出, stack的接口相比 vector/string/list 的接口少的太多了

  1. 构造函数 && 容器适配器
  • 容器适配器的含义:
    首先, 适配器 — — 用户传数据进来, 我们用合适的容器来进行管理
    其次, 容器 — — 容器要符合类型的要求. 比如堆要求用下标来访问数据, 那么我们适配的容器就应该是vector, 而不应该是list
    总结下来就是, 容器适配器是 外壳用容器封装, 数据由容器来进行管理
  1. 不支持下标访问数据, 不能进行遍历.
    只能通过不断的 pop 来进行访问数据
int main()
{stack<int> st;st.push(1);st.push(5);st.push(9);st.push(8);st.push(6);st.push(90);cout << "size->" << st.size() << endl;cout << "出数据->";while (!st.empty()){cout << st.top() << " ";st.pop();}cout << endl;return 0;
}

运行结果:

size->6
出数据->90 6 8 9 5 1

栈的知识也就这么多, 下面进入queue

queue

队列的特点是 先进先出 (first in first out)

跟stack很相似, 但是队列不仅有队头也有队尾, 而stack只有栈顶

  1. 我们发现, queue也使用的是 容器适配器
  2. 跟stack一样, 不支持下标访问数据, 不能进行遍历.
    只能通过不断的 pop 来进行访问数据
int main()
{queue<int> q;q.push(1);q.push(5);q.push(9);q.push(8);q.push(6);q.push(90);cout << "size->" << q.size() << endl;cout << "出数据->";while (!q.empty()){cout << q.front() << " ";q.pop();}cout << endl;return 0;
}

运行结果:

size->6
出数据->1 5 9 8 6 90

题目训练

  1. 最小栈



首先, 先想到的是定义一个全局变量 min, 在每次push 和 pop的时候更新一下min, 然后返回min就行了.
这么做是真的没问题吗? 看一下下面的例子:
push: 6, 5, 4, 3, pop两次
此时当前栈的最小值应该是5, 但是按照我们的想法, min应该是3才对
上面的那个想法不能很好地控制栈空间的变化

其实, 我们可以用两个栈来做: 一个负责正常工作, 一个负责记录当前栈的最小值

解题代码:

class MinStack {
public:void push(int val) {st.push(val);// min_st进数据: 1. 首元素, 2.进入数据的元素 <= min_st的栈顶元素if(min_st.size() == 0 || val <= min_st.top()){min_st.push(val);}}void pop() {if(min_st.top() == st.top()){min_st.pop();}st.pop();}int top() {return st.top();}int getMin() {return min_st.top();}private:stack<int> st;stack<int> min_st;
};
  1. 栈的压入, 弹出序列

    不绕弯子了: 本题属于 模拟题, 模拟压栈,出栈的顺序来做的. 由此需要一个辅助栈来进行, 最后判断辅助栈是否为空就知道答案了!

思路:

  1. 不管什么, 先进栈 st
  2. 再判断栈顶元素是否和出栈数组的当前值相同
    1. 不相同, 什么事情也不用做, 继续入栈
    2. 相同, st出栈, 出栈数组向前挪动数据, 直至和栈顶元素不相同
  3. 结果: 看st是否为空
    1. 为空, 说明按照入栈, 出栈的顺序走了一遍, 说明逻辑是通的
    2. 不为空, 说明中间出现了问题, 说明逻辑是错误的

解题代码:

bool IsPopOrder(vector<int>& pushV, vector<int>& popV) 
{stack<int> st; // 辅助栈int pushi = 0; // 控制入栈数组int popi = 0;  // 控制出栈数组// 当没数据可入了, 说明入栈结束while(pushi < pushV.size()){// 先入栈st.push(pushV[pushi]);pushi++;// 防止st栈为空while(st.size() && st.top() == popV[popi]){st.pop();popi++;}}return st.empty();
}

2、知而不行,只是未知。
语出明·王守仁《传习录》。学了知识,而不实践,这等于没有学到知识一样。

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

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

相关文章

Vulnhub-driftingbules:5 靶机复现完整过程

kali的IP地址&#xff1a;192.168.200.14 靶机IP地址&#xff1a;192.168.200.60 一、信息收集 1.对利用nmap目标靶机进行扫描 由于arp-scan属于轻量级扫描&#xff0c;在此直接使用nmap进行对目标靶机扫描开放端口 nmap -A -p 1-65535 192.168.200.60使用nmap扫描 开放的端…

Unity引擎更新收费模式:从收入分成转向游戏安装量,将会有哪些影响呢

一、前言 Unity 引擎宣布自 2024 年 1 月 1 日起&#xff0c;将根据游戏安装量对开发者进行收费。官网通知如下 收费模式如图 这张图的大致意思就是&#xff0c; 从2024年1月1日开始&#xff0c;Unity将对所有达标的用户&#xff08;开发者&#xff09;根据游戏安装量征收“安…

STM32 NVIC中断优先级管理通过结构图快速理解

STM32 NVIC中断优先级管理通过结构图快速理解 &#x1f4d1;抢占优先级和响应优先级基本常识 &#x1f33f;抢占优先级的级别高于响应优先级。&#x1f33f;抢占优先级数值编号越小&#xff0c;所代表的优先级就越高&#xff1b;同理&#xff0c;响应优先级也是如此。&#x1…

存档&改造【02】下载文件模板 打印二维码样式设置

1.下载文件模板 文件模板获取得先设置好全局变量和获取文件URL 声明变量 function fileDownload(url, name) {return new Promise((resolve, reject) > {var xhr new XMLHttpRequest();xhr.open("GET", url, true); // 也可以使用POST方式&#xff0c;根据接口…

Redis的安装与基本使用

文章目录 Linux 环境下安装Redis下载Redis 安装包解压安装包安装Redis进入redis安装包下编译并且安装到指定目录下 启动redis配置远程访问找到Redis.config文件 Windows 环境下安装Redis说明官方提供方式安装或启用WSL2在WSL&#xff08;Ubuntu&#xff09;上安装Redis启动Redi…

【三次握手、四次挥手】TCP建立连接和断开连接的过程、为什么需要三次握手,为什么需要四次挥手、TCP的可靠传输如何保证、为什么需要等待2MSL等重点知识汇总

目录 三次握手 为什么握手需要三次 四次挥手 为什么挥手需要四次 TCP的可靠传输如何保证 TIME_WAIT等待的时间是2MSL 三次握手 三次握手其实就是指建立一个TCP连接。进行三次握手的主要作用就是为了确认双方的接收能力和发送能力是否正常、指定自己的初始化序列号为后面的…

IOTE 2023国际物联网展直击:芯与物发布全新定位芯片,助力多领域智能化发展

IOTE 2023国际物联网展&#xff0c;作为全球物联网领域的盛会&#xff0c;于9月20日在中国深圳拉开帷幕。北斗星通集团应邀参展&#xff0c;旗下专业从事物联网、消费类GNSS芯片研发设计的芯与物公司也随其亮相本届盛会。 展会上&#xff0c;芯与物展示了一系列创新的GNSS定位…

Spring 学习(四)注解实现自动装配及注解开发

1. 注解实现自动装配 JDK 1.5 开始支持注解&#xff0c;Spring 2.5 开始支持注解。 使用须知 导入约束 配置注解的支持&#xff08; <context:annotation-config/> &#xff09; <?xml version"1.0" encoding"UTF-8"?> <beans xmlns&qu…

在pandas中使matplotlib动态画子图的两种方法【推荐gridspec】

先上对比图&#xff0c; 第一种方法&#xff0c;这里仅展示1个大区&#xff0c;多个的话需要加一层循环就可以了&#xff0c;主要是看子图的画法 当大区下面的国家为1个或2个时&#xff0c;会进行报错 # 获取非洲国家列表 african_countries df[df[大区] 南亚大区][进口国…

flink中不同序列化器性能对比

背景 flink有多种序列化方式&#xff0c;包括flink内置的以及fallback到kryo的&#xff0c;那么他们之间有多大的性能差距呢&#xff0c;本文就从https://flink.apache.org/2020/04/15/flink-serialization-tuning-vol.-1-choosing-your-serializer-if-you-can/这篇文章里摘录…

【李沐深度学习笔记】线性代数实现

课程地址和说明 线性代数实现p2 本系列文章是我学习李沐老师深度学习系列课程的学习笔记&#xff0c;可能会对李沐老师上课没讲到的进行补充。 这节就算之前内容的复习&#xff0c;后面以截图形式呈现 标量由只有一个元素的张量表示 import torch x torch.tensor([3.0]) y …

华为云云耀云服务器L实例评测|搭建CounterStrike Source Delicated Server(CS起源游戏服务器)

华为云云耀云服务器L实例评测&#xff5c;搭建CounterStrike Source Delicated Server&#xff08;CS起源游戏服务器&#xff09; #【有奖征文】华为云云服务器焕新上线&#xff0c;快来亲身感受评测吧&#xff01;# ⭐️ CounterStrikeSource&#xff08;CS起源是Valve的一款…

【Vue简介+搭建Vue开发环境+Hello小案例】

Vue简介搭建Vue开发环境Hello小案例 1 Vue简介2 搭建Vue开发环境3 Hello小案例 1 Vue简介 Vue是一套用于构建用户界面的渐进式JavaScript框架。&#xff08;渐进式&#xff1a;Vue可以自底向上逐层的应用<简单应用&#xff1a;只需要一个轻量小巧的核心库><复杂应用&…

tp8 Editor.md

Editor.md - 开源在线 Markdown 编辑器 放于public文件夹下 html代码&#xff1a; <div class"layui-col-md12" id"content"><textarea name"content" placeholder"详情" class"layui-textarea">{notempty nam…

05-Zookeeper典型使用场景实战

上一篇&#xff1a;04-Zookeeper集群详解 1. Zookeeper 分布式锁加锁原理 如上实现方式在并发问题比较严重的情况下&#xff0c;性能会下降的比较厉害&#xff0c;主要原因是&#xff0c;所有的连接都在对同一个节点进行监听&#xff0c;当服务器检测到删除事件时&#xff0c…

目标追踪学习经验总结

标题目标追踪算法学习经验总结   最近对目标追踪算法进行了学习&#xff0c;以下是我的学习经验&#xff0c;如有不对之处&#xff0c;欢迎大家指正。 1、简介 1.1 定义 目标跟踪是通过分析视频图片序列&#xff0c;对检测出的各个候选目标区域实施匹配&#xff0c;定位出这…

nat综合实验

路漫漫其修远兮,吾将上下而求索。 实验目的如图 实验思路&#xff1a;配置内网&#xff0c;再配置外网&#xff0c;再做nat clien1配置 clien2配置 pc3配置 lsw1配置 sysname lsw1 # vlan batch 10 20 30 # interface MEth0/0/1 # interface Eth-Trunk1port link-type trunkp…

数据结构——排序

排序算法 前言一、认识排序排序的概念常见的排序算法排序实现的接口 二、常见排序算法的实现插入排序直接插入排序希尔排序 选择排序直接选择排序堆排序 交换排序冒泡排序 三、各个排序的效率比较四、完整代码演示&#xff1a;shell_insert.hshell_insert.ctest.c 总结 前言 来…

怎样在CSDN插入代码块 怎么变色?

添加代码块&#xff0c;通常有三种方式&#xff1a; 文章目录 ①点击 工具栏中的代码块 代码块 </>&#xff0c;② 快捷键 ctrlshiftk③ 先粘贴上代码&#xff0c;在选中 ctrlshiftk4 如果代码没有变彩色 ①点击 工具栏中的代码块 代码块 </>&#xff0c; 例如 选…

Docker版部署RocketMQ开启ACL验证

一、拉取镜像 docker pull apache/rocketmq:latest 二、准备挂载目录 mkdir /usr/local/rocketmq/data mkdir /usr/local/rocketmq/conf 三、运行 docker run \ -d \ -p 9876:9876 \ -v /usr/local/rocketmq/data/logs:/home/rocketmq/logs \ -v /usr/local/rocketmq/data…