C++ 入门18:STL 容器之栈(stack)与队列(queue)

Microsoft Defender防病毒扫描添加排除项 Win10与Win11上的“**Microsoft Defender防病毒**”功能默认会自动扫描所有非压缩文件,如果发现病毒或疑似病毒甚至经过手动修改后某些安装文件,会自动将其删除,如果是后面两种情况,则可能会造成误报,对我们正常办公或学习造成不利影响。 此时, 我们可以将某个目录或文件设置为“**Microsoft Defender防病毒不会扫描已排除的项目**”(<red>但要注意:这些被排除的目录或文件会给笔记本造成一定的安全风险,如果真有病毒感染这些目录或文件它们也不会被“**Micr 阅读详情

往期回顾:

C++ 入门15:STL 容器之列表(list)_c++列表-优快云博客

C++ 入门16:STL 容器之集合(set)与多重集合(multiset)_stl 集合-优快云博客

C++ 入门17:STL 容器之映射(map)与多重映射(multimap)_c++ 17 -优快云博客


 C++ 入门18:STL 容器之栈(stack)与队列(queue)

1. 什么是栈(stack)

栈(Stack)是一种遵循先进后出(LIFO,Last In First Out)原则的线性数据结构。在栈中,元素的插入和删除操作都发生在栈的顶部。栈的常见应用包括函数调用栈、表达式求值等。

基本特性

  • 插入和删除操作都发生在栈顶。
  • 后插入的元素先被删除。

栈的基本操作

引入头文件

在使用栈之前,需要引入头文件 <stack>。

#include <stack>
创建栈

我们可以通过默认构造函数创建一个空栈,也可以使用初始化列表创建栈。

示例代码:
#include <iostream>
#include <stack>
using namespace std;

int main() {
    stack<int> intStack; // 创建一个空栈

    // 向栈中压入元素
    intStack.push(10);
    intStack.push(20);
    intStack.push(30);

    return 0;
}
常用成员函数
  • push():向栈中压入一个元素。
  • pop():从栈中弹出栈顶元素。
  • top():访问栈顶元素。
  • empty():检查栈是否为空。

  • size():返回栈中的元素个数。
示例代码:
stack<int> intStack;

intStack.push(10);
intStack.push(20);
intStack.push(30);

cout << "Top of the stack: " << intStack.top() << endl; // 输出 30

intStack.pop(); // 弹出栈顶元素

cout << "Top of the stack after pop: " << intStack.top() << endl; // 输出 20

cout << "Stack size: " << intStack.size() << endl; // 输出 2

if (intStack.empty()) {
    cout << "The stack is empty!" << endl;
} else {
    cout << "The stack is not empty!" << endl;
}

栈的应用

栈常用于处理递归问题、表达式的求值等。例如,括号匹配问题、逆波兰表达式的计算等,都可以用栈来解决。

2. 什么是队列(queue)

队列(Queue)是一种遵循先进先出(FIFO,First In First Out)原则的线性数据结构。在队列中,元素的插入发生在队尾,删除发生在队头。队列的常见应用包括任务调度、打印队列等。

基本特性

  • 插入操作发生在队尾。
  • 删除操作发生在队头。

  • 先进先出(FIFO)。

队列的基本操作

引入头文件

在使用队列之前,需要引入头文件 <queue>。

#include <queue>
创建队列

我们可以通过默认构造函数创建一个空队列,也可以使用初始化列表创建队列。

示例代码:
#include <iostream>
#include <queue>
using namespace std;

int main() {
    queue<int> intQueue; // 创建一个空队列

    // 向队列中压入元素
    intQueue.push(10);
    intQueue.push(20);
    intQueue.push(30);

    return 0;
}
常用成员函数
  • push():向队列中压入一个元素。
  • pop():从队列中弹出队头元素。
  • front():访问队头元素。
  • back():访问队尾元素。
  • empty():检查队列是否为空。

  • size():返回队列中的元素个数。
示例代码:
queue<int> intQueue;

intQueue.push(10);
intQueue.push(20);
intQueue.push(30);

cout << "Front of the queue: " << intQueue.front() << endl; // 输出 10
cout << "Back of the queue: " << intQueue.back() << endl; // 输出 30

intQueue.pop(); // 弹出队头元素

cout << "Front of the queue after pop: " << intQueue.front() << endl; // 输出 20

cout << "Queue size: " << intQueue.size() << endl; // 输出 2

if (intQueue.empty()) {
    cout << "The queue is empty!" << endl;
} else {
    cout << "The queue is not empty!" << endl;
}

队列的应用

队列常用于排队问题、任务调度等场景。例如,操作系统中的进程调度通常使用队列,消息队列用于线程间通信等。

3. 栈(stack)与队列(queue)的区别 

特性栈(stack)队列(queue)
数据结构类型LIFO(后进先出)FIFO(先进先出)
元素插入在栈顶插入元素在队尾插入元素
元素删除在栈顶删除元素在队头删除元素
常见应用表达式求值、括号匹配、递归等任务调度、进程调度、消息队列等

4. 栈与队列的高级应用

栈的高级应用:括号匹配

栈常用于括号匹配问题,例如判断一个字符串中的括号是否正确配对。

示例代码:
#include <iostream>
#include <stack>
#include <string>
using namespace std;

bool isValidParentheses(const string& s) {
    stack<char> stack;
    for (char c : s) {
        if (c == '(') {
            stack.push(c);
        } else if (c == ')') {
            if (stack.empty()) {
                return false;
            }
            stack.pop();
        }
    }
    return stack.empty();
}

int main() {
    string s = "(()())";
    if (isValidParentheses(s)) {
        cout << "Valid parentheses" << endl;
    } else {
        cout << "Invalid parentheses" << endl;
    }
    return 0;
}

队列的高级应用:任务调度

队列常用于任务调度,例如操作系统中的进程调度通常使用队列来实现。

示例代码:
#include <iostream>
#include <queue>
using namespace std;

int main() {
    queue<string> taskQueue;

    // 模拟任务入队
    taskQueue.push("Task 1");
    taskQueue.push("Task 2");
    taskQueue.push("Task 3");

    // 处理任务
    while (!taskQueue.empty()) {
        cout << "Processing " << taskQueue.front() << endl;
        taskQueue.pop(); // 任务出队
    }

    return 0;
}

结语

以上就是 C++ 标准模板库中的栈和队列的基础知识点了。栈遵循先进后出的原则,而队列遵循先进先出的原则。掌握栈和队列的使用,基本上在开发中都会用到的,大家多看看,一定要掌握。

都看到这里了,点个赞再走呗朋友~

加油吧,预祝大家变得更强!

NLP DAY1: 文本数据读取 txt 文本数据的读写CSV 及 Excel 文本数据的读写更多的 DataFrame 操作数据规模太大怎么办相信通过本次实验的学习,同学们可以游刃有余地面对各种数据文件了。在接下来的实验中,我们将开始真正地开启自然语言处理之旅,开始认识并熟悉一些常见的针对文本本身的预处理操作。 阅读详情

相关推荐

嵌入式设备低功耗设计误区:为什么你的RK3568总是被‘意外’唤醒?

本文深入分析RK3568嵌入式设备低功耗设计中的常见误区,重点探讨唤醒源管理不当导致的意外唤醒问题。通过解析硬件设计陷阱、软件配置错误及系统化审计方法,帮助开发者有效排查和解决GPIO配置、唤醒源设置等关键因素引起的功耗异常,提升设备续航能力。

php55的博客 460

优先队列 队列 栈 的使用方法

STL 中优先队列的使用方法(priority_queu) 基本操作: empty() 如果队列为空返回真 pop() 删除对顶元素 push() 加入一个元素 size() 返回优先队列中拥有的元素个数 top() 返回优先队列对顶元素 在默认的优先队列中,优先级高的先出队。在默认的int型中先出队的为较大的数。 使用方法: 头文件: #include    声明方式:

我只想做一个努力的人 1113

PLL锁相环性能上不去?可能是电荷泵的电流失配在捣鬼(附Jae-Shin Lee经典方案解析)

本文深入分析了PLL锁相环性能瓶颈的根源——电荷泵电流失配问题,详细解析了Current Mismatch和Current Deviation的区别及其对系统的影响。重点介绍了Jae-Shin Lee的多级电流镜技术,该方案通过运放构建虚拟短路和四级电流镜结构,显著降低了电流失配,使参考杂散改善15dB以上。文章还提供了从仿真到流片的完整优化流程,帮助工程师系统解决电荷泵性能问题。

weixin_30684743的博客 370

C++ STL 栈和队列详解

一.解释: 1.栈   栈是一种特殊的线性表。其特殊性在于限定插入和删除数据元素的操作只能在线性表的一端进行。如下所示:      结论:后进先出(Last In First Out),简称为LIFO线性表。   举个例子:你在洗碗把洗好的碗编号为1、2、、、n依次摞起来,1号在最下面,向上编号依次增加,然后再从上到下把碗放好,这样的话,先被洗的碗,就后被放好。 2.队...

dengguan2720的博客 437

保姆级教程:用R语言自动化处理FAERS季度数据(从文件合并到删除废弃Case)

本文提供了一份详细的R语言教程,指导如何自动化处理FAERS季度数据,包括文件合并和删除废弃Case。通过使用tidyverse、fs等R包,构建健壮的自动化流程,特别适合药物安全监测领域的数据分析师。教程涵盖环境准备、智能合并多季度数据、精准删除废弃Case等关键步骤,并提供了错误处理与日志记录的实用技巧。

weixin_42701915的博客 126

lattice 黑盒子的生成和使用(Creating Your Own Black Box Modules)

很多客户,特别是外包项目,需要做黑盒子,防止他人看到源码,那么这就需要对相关的源码打包加封了。diamond help 说的也是模糊模糊的,这次给出实际验证过的流程。 1.先将要加封的模块间一个工程,建好工程,写好代码之后,模块名字叫做crosslink(这个使用黑盒子的时候要用),代码如下: module crosslink( output wire[3:0] led, input wire clk, input wire reset ); reg [29:0] cnt; reg [3:0] led1;

qq_39633876的博客 1481

STL栈与队列的操作

栈定义:栈是限定只能在表的一端进行插入和删除的线性表。在表中允许插入和删除的一端叫做栈顶(top);表的另一端则叫做栈底(bottom)。栈又称后进先出(Last In First Out,简写为LIFO)表。 •栈满:栈内元素个数为MaxSize时。top=MaxSize-1 •栈空:栈内无元素。top=-1 •上溢:当栈满时,还要进栈。 •下溢:当栈空时,还要出栈。   队列定义:

apollo_miracle的博客 3234

完整的 Python 数据分析案例:新能源汽车续航里程预测

随着新能源汽车的普及,续航里程成为消费者关注的重要指标。准确预测新能源汽车的续航里程,有助于车企优化电池管理系统、提升车辆性能,也能帮助消费者合理规划出行。本案例将基于新能源汽车的各项参数,如电池容量、行驶速度、环境温度等,构建续航里程预测模型。通过以上改进,可以提高数据处理的准确性、模型的性能和可视化的效果。

daqsdfas的博客 1588

【STL容器讲解—栈&队列】

详细讲解关于STL中queue、stack容器的一系列操作

qq_41841107的博客 231

SAP S4 HANA:按单生产(MTO)场景中的COGS分割

本文介绍了SAP S/4HANA中提供的各种选项,以在销售订单/商品是按订单生产(以下称为MTO)生产流程中的成本对象时,在基于帐户的COPA环境中报告COGS分割信息。

adam915的博客 1191

日常工作记录---在虚拟机中进行slam建图

   今天是10月24号,首先祝各位程序员们节日快乐!!!    最近一周由于实习的原因,对ROS的探索学习,停滞了一段时间,所以今天也就没什么大的进展,本篇文章仅仅记录一下,我在虚拟机中进行slam建图可行性验证的过程,本篇文章同样使用古月学院《如何在Gazebo中实现阿克曼转向车的仿真》的课程资料来进行验证    下面各条之间并没有严格的顺序关系,每一条都是独立的,都是我在验证过程中的经验或者记录:    1、在运行roslaunch bringup racecar_gazebo_rviz.lau

慕羽★的博客 4828

STL 栈与队列

STL中有关于栈与队列的相关内容。 在大多数情况下可以不需要自己写相应函数,直接调用STL中栈与队列的相关函数,简洁方便。 以下是STL中栈与队列的头文件,定义方式以及常用函数: 头文件 #include<queue>// 队列 #include<stack>//栈 定义方式 stack<datatype> s;//栈的定义方式 queue&...

Lj135328的博客 279

【数据湖仓】:Iceberg、Hudi 和 Paimon 对比

适用于需要多计算引擎支持和复杂查询的离线批处理场景。其中立性和灵活性使其成为构建新型数据平台的理想选择。:在需要高频数据更新和高效小文件管理的场景中表现出色,适合实时数据处理和增量数据更新的业务需求。:专为实时流式数据处理设计,适用于对数据实时性要求高的业务场景,如实时数据分析和实时指标监控。通过以上分析,可以看出 Apache Iceberg、Apache Hudi 和 Apache Paimon 各有其独特的优势和适用场景。企业应根据自身业务需求和技术栈选择合适的数据湖仓方案,以充分发挥其价值。

欢迎来到我的博客,一起探索代码里的世界! 1609

STL常用容器—stack与queue容器(栈与队列)

本文主要介绍C++ STL中的stack和queue两大容器的基本概念与常用方法的调用

weixin_46216674的博客 1175

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

C++必修:STL之stack与queue的使用与实现

本文涵盖栈、队列及逆波兰表达式知识。介绍其概念、容器适配器、使用方法、模拟实现,还有中缀转后缀及计算规则。丰富内容助您深入理解数据结构,快来探索!

Bettysweetyaaa的博客 1610

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

【C++】掌握STL三大容器:stack、queue、priority_queue

摘要:文章介绍了三种STL容器适配器:stack(后进先出)、queue(先进先出)和priority_queue(优先级队列)。stack默认使用deque作为底层容器,支持push、pop、top等操作;

2402_83411382的博客 1097

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

C++提高编程--STL常用容器(stack容器、queue容器、list容器)详解

本文介绍了C++ STL中常用的三种容器:stack、queue和list的基本概念及常用接口。stack是先进后出的数据结构,提供push/pop等操作;queue是先进先出的队列结构,支持front/back访问;list是双向链表,具有高效插入/删除特性。文章通过代码示例演示了各容器的基本使用方法,包括构造、遍历、赋值等操作,并比较了不同容器的优缺点,为C++编程提供了实用的容器选择参考。

m0_71676523的博客 940

C++ 学习(18)STL - deque容器、stack容器、queue容器

本章主要学习: deque容器及常用接囗(构造函数、赋值操作、大小操作、插入和删除、数据读取、排序)、stack容器及常用接囗(构造函数、赋值操作、数据存取、大小操作)、queue容器及常用接囗(构造函数、赋值操作、数据存取、大小操作)...

ling1998的博客 827

从零开始学C++之STL(十一):容器适配器(stack、 queue 、priority_queue)源码浅析与使用示例

一、容器适配器 stack queue priority_queue stack、queue、priority_queue 都不支持任一种迭代器,它们都是容器适配器类型,stack是用vector/deque/list对象创建了一个先进后出容器;queue是用deque或list对象创建了一个先进先出容器;priority_queue是用vector/deque创建了一个排序队列,

Meditation 5197

STL——list、stack与queue

STL——list、stack与queue

热爱编程的小K的博客 1539

C++ STL标准库:容器适配器 栈stack

文章目录1. 简介2. 基本使用3. 更换stack的内部实现容器 stack - C++ Reference (cplusplus.com) 1. 简介 stack(栈)是一个后进先出(LIFO,Last in First out)的容器适配器,栈是通过现有序列容器 (默认是双端队列 deque)来实现的。 stack只有一个开囗。STL以 deque作为缺省情况下的 stack内部结构,但 deque是双向开口的数据结构,所以 需要封闭一端。 2. 基本使用 #include<stack&gt

超级大洋葱的博客 856

18.C++入门:stack和queue|priority_queue|容器适配器|deque

本文介绍了C++中三种容器适配器:stack、queue和priority_queue的基本概念和使用方法。stack是后进先出(LIFO)容器,提供了push、pop、top等操作;queue是先进先出(FIFO)容器,支持front、back、push、pop等操作;priority_queue是优先级队列,元素按特定顺序排列。文章通过代码示例展示了如何用栈实现最小栈、判断栈的压入弹出序列、计算逆波兰表达式,以及用队列实现栈等经典算法问题。同时提供了这些容器适配器的模拟实现代码,帮助读者深入理解其底层原

ChoSeitaku的博客 875

C++ STL:stack和queue的使用及源码剖析

stack的使用#include<stack>方法描述stack.push(elem);往栈顶添加元素。stack.pop();从栈顶移除第一个元素。stack.top();返回栈顶元素。stack.empty();判断堆栈是否为空,栈空返回true,栈非空返回false。stack.size();返回堆栈的...

weixin_29442031的博客 247

C++ list、stack 与 queue:从链式容器到容器适配器

本文从 list 的双向链表结构和迭代器出发,梳理其常用接口、失效规则及模拟实现,并进一步讲解 stack、queue、priority_queue 的使用与典型问题。最后结合容器适配器和 deque 的底层结构,分析不同容器的特点与选择依据。

HD12345432的博客 378

C++ STL之容器介绍(vector、list、set、map)

STL(Standard Template Library)即标准模板库。STL通过使用模板实现了容器和算法的分离,允许程序员编写与类型无关的代码,这正是泛型编程的核心思想。

new9232的博客 1600

初识c++:stack和queue详解

目录#stack和queue详解#1.容器适配器2.stack的介绍和使用2.1 stack的介绍2.2 stack的使用3.stack的模拟实现4.queue的介绍和使用4.1 queue的介绍4.2 queue的使用5.queue的模拟实现6.priority_queue的介绍和使用6.1 priority_queue的介绍6.2priority_queue的使用7.priority_queue的模拟实现1.容器适配器。

2302_79860961的博客 895
上一篇: <<软件测试与验证>>期末复习题(弄懂稳过!!!)
下一篇: C++ 入门19:STL 容器之优先队列(priority_queue)
从一的
博客等级 码龄5年 1995粉丝 213原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值