C++ 栈( stack )学习

目录

1.栈

2.模拟栈

1.1.入栈( push )

1.2.出栈( pop )

1.3.获取栈顶元素( top )

3.直接使用栈( stack )

3.1.导入头文件并创建栈

3.2.栈的操作

3.2.1.入栈( push )

3.2.2.出栈( pop )

3.2.3.获取栈顶元素( top )

3.2.4.获取栈中元素个数( size )

3.2.5.判断栈是否为空( empty )

4.例


1.栈

栈简单来说就是图1一样的东西,每一层放一个数据。添加数据后像图2一样。栈的特点为先进后出。就是先进去的后出来,后进去的先出来。经常用于前缀表达式计算和后缀表达式计算。

图1
图2

2.模拟栈

要模拟栈需要先在全局定义数组和函数:

int stack[1001]; // int数组模拟栈
int TOP = 0; // 栈顶指针初始化

如果想要是别的类型的栈,把数组的数据类型和push(int x)的参数改一下就好了。

1.1.入栈( push )

定义入栈( 即在栈顶添加元素 )函数:

void push(int x)
{TOP++;stack[TOP] = x;
}

1.2.出栈( pop )

定义出栈( 即删除栈顶元素 )函数:

void pop()
{TOP--;
}

1.3.获取栈顶元素( top )

定义获取栈顶元素函数:

int top()
{return st[TOP]; // 返回栈顶元素
}

3.直接使用栈( stack )

可以使用stack头文件直接调用函数,且功能更多。

3.1.导入头文件并创建栈

在代码最前面输入

#include <stack>

在main函数中输入stack <数据类型> 栈名;就能定义一个栈。

3.2.栈的操作

3.2.1.入栈( push )

入栈( 在栈顶添加元素 )函数为push()。有参函数

队列名.push(x);

x为一个数据( 类型要和栈的类型一样 )。

3.2.2.出栈( pop )

出栈( 删除栈顶元素 )函数为pop()。无参函数。

队列名.pop();

3.2.3.获取栈顶元素( top )

获取栈顶元素函数为top()。无参函数。

队列名.top();

3.2.4.获取栈中元素个数( size )

获取栈中元素个数函数为size()。无参函数。

队列名.size();

3.2.5.判断栈是否为空( empty )

判断栈是否为空函数为empty()。无参函数。空返回1,不空返回0。

队列名.empty();

4.例

使用stack库进行后缀表达式运算。

#include <iostream> // 头文件
#include <stack>
#include <string>
#include <cmath>
using namespace std; // 命名空间int main() // 主函数
{stack<string> s; // 定义栈string a; // 定义字符串getline(cin, a); // 带空格输入for (int i = a.length() - 1; i >= 0; i--){int sum = 0, idx = 0;while (a[i] >= '0' && a[i] <= '9'){// 多位数处理sum = sum + (a[i] - '0') * pow(10, idx);idx++;i--;}if (sum != 0){s.push(sum);continue;}// 符号处理int num1 = s.top();s.pop();int num2 = s.top();s.pop();if (a[i] == '+') // 加{s.push(num1 + num2);}else if (a[i] == '-') // 减{s.push(num1 - num2);}else if (a[i] == '*') // 乘{s.push(num1 * num2);}else if (a[i] == '/') // 除{if (num2 != 0){s.push(num1 / num2);}else{s.push("wrong");}}}cout << s.top(); // 输出结果return 0; // 结束程序
}

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

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

相关文章

代码随想录算法训练营day8 | 344.反转字符串、541.反转字符串 II、卡码网:54.替换数字

文章目录 344.反转字符串思路 541.反转字符串 II思路 卡码网&#xff1a;54.替换数字思路复习&#xff1a;字符串 vs 数组 总结 今天是字符串专题的第一天&#xff0c;主要是一些基础的题目 344.反转字符串 建议&#xff1a; 本题是字符串基础题目&#xff0c;就是考察 revers…

ChatGPT:宽列数据库是什么?

ChatGPT&#xff1a;宽列数据库是什么&#xff1f; 宽列数据库&#xff08;Wide-Column Store&#xff09;是一种 NoSQL 数据库&#xff0c;它的设计灵感来自于 Google 的 Bigtable。宽列数据库适用于处理大规模的分布式数据存储&#xff0c;特别是在需要高性能读写、灵活的数据…

docker挂载部署reids6.2.1

1.拉取镜像 docker pull redis:6.2.12.创建挂在目录&#xff08;根据自己要求修改具体目录&#xff09; mkdir -p /home/admin/redis/{data,conf}3.在/home/admin/redis/conf目录下创建redis.conf文件 cd /home/admin/redis/conf touch redis.conf4.复制下面文本到redis.conf…

深入理解 Laravel 中的会话管理

引言 会话管理是 Web 应用中一个至关重要的功能&#xff0c;它允许应用识别并跟踪用户的会话状态。Laravel 提供了一个强大而灵活的会话管理系统&#xff0c;使得开发者可以轻松实现用户状态的跟踪和管理。本文将详细介绍 Laravel 中的会话管理机制&#xff0c;包括会话的创建…

浅析JWT原理及牛客出现过的相关面试题

原文链接&#xff1a;https://kixuan.github.io/posts/f568/ 对jwt总是一知半解&#xff0c;而且项目打算写个关于JWT登录的点&#xff0c;所以总结关于JWT的知识及网上面试考察过的点 参考资料&#xff1a; Cookie、Session、Token、JWT_通俗地讲就是验证当前用户的身份,证明-…

不断把别人“装”进我们的灵魂口袋

嘿&#xff0c;朋友们&#xff01;今天我们来聊聊一种超酷的能量——本色示人。这不是什么秘密武器&#xff0c;但它比任何超能力都来得实在。 第一部分&#xff1a;本色示人&#xff0c;能量界的“超级赛亚人” 1.1 坦诚的超能力 想象一下&#xff0c;如果你的内心强大到可以…

使用SpringBoot中@Scheduled注解应用场景和示例代码

概述 Scheduled注解可以应用在方法上&#xff0c;用于指定方法的执行时间。它有几种常见的用法&#xff0c;可以设置固定的时间间隔、固定的延迟时间、或者使用Cron表达式来定义更复杂的调度规则。 应用场景 定时任务执行&#xff1a;例如每天凌晨执行数据备份。定时报表生成…

Window部署Ollama+Qwen2.0+Open-WebUI

文章目录 Windows下安装Docker安装Docker检查是否安装成功, 出现版本即为安装成功安装Ollama启动 Ollama 并拉取模型(选做) 修改默认地址和端口(选做) Ollama 进行跨域配置安装open-webui Windows下安装Docker 准备条件 开启Hyper-V&#xff0c;在“启用或关闭Windows功能”里…

Java中的BigDecimal

BigDecimal 是 Java 中用于高精度计算的类&#xff0c;它主要用于处理非常大或非常精确的浮点数&#xff0c;特别是那些需要精确小数点的场景&#xff0c;比如金融计算。由于 float 和 double 类型在进行运算时可能会产生精度丢失的问题&#xff0c;BigDecimal 提供了一种解决方…

C语言 #指针数组 #数组指针 #数组参数、指针参数

文章目录 前言 一、指针数组 1、概念&#xff1a; 2、指针数组有什么用呢&#xff1f; 二、数组指针 1、数组指针的定义 2、数组名与 &数组名 的区别 3、数组指针如何初始化&#xff1f; 4、数组指针的用法 三、根据代码区分 指针数组 和 数组指针 四、数组参数、指针参数 …

软件-vscode-plantUML-drawio

文章目录 vscode基础命令 实操1. vscode实现springboot项目搭建 &#xff08;包括spring data jpa和sqlLite连接&#xff09; PlantUMLDrawio基础实操 vscode 基础 命令 启动mysql命令 docker run --name mysql-container -e MYSQL_ROOT_PASSWORD123456 -p 3306:3306 -d my…

Shell编程之正则表达式与文本三剑客

目录 一、正则表达式 1.引言--什么是正则表达式 1.1正则表达式的功能 2.基础正则表达式&#xff08;BRE&#xff09; 2.1特殊字符 2.2定位符 2.3非打印字符 3.扩展正则表达式(ERE) 4.元字符操作的案列 二、命令小工具 1.cut&#xff1a;列截取工具 2.sort排序 …

【Android】使用ViewPager2与TabLayout实现顶部导航栏+页面切换

【Android】使用ViewPager2与TabLayout实现顶部导航栏&#xff0b;页面切换 TabLayout与ViewPager2概述 TabLayout TabLayout 是 Android 支持库中的一个组件&#xff0c;它是 Design 支持库的一部分。TabLayout 提供了一个水平的标签页界面&#xff0c;允许用户在不同的视图…

解决Todesk远程连接没有接显示屏的服务器,出现黑屏现象

解决办法就是虚拟出来一个显示屏 通过终端安装虚拟显示器软件。 $ sudo apt-get install xserver-xorg-core-hwe-18.04 $ sudo apt-get install xserver-xorg-video-dummyubuntu20.04、 ubuntu22.04都适用 2. 添加配置文件 sudo vim /usr/share/X11/xorg.conf.d/xorg.conf…

TensorFlow 可用的植物分类模型有哪些,各有什么优缺点

在树莓派上运行CentOS 7,并使用TensorFlow Java版本实现植物分类功能可以通过以下步骤实现。以下是详细的指导: 一、安装和设置环境 1. 更新系统并安装基本工具 确保你的CentOS 7系统是最新的,并安装必要的工具: sudo yum update -y sudo yum install -y wget unzip gi…

CogVideo 实测,智谱「清影」AI视频生成,全民免费,连 API 都开放了!

不得不说&#xff0c;AI 视频生成界最近非常火热~ 前有快手「可灵」开放内测&#xff0c;一下子带火了老照片修复&#xff0c;全网刷屏&#xff1a; 怕是你还没拿到内测资格&#xff0c;被称为 “国货之光” 的「可灵」就结束了免费无限量模式。每天只有66点的免费额度&#x…

鸿蒙(API 12 Beta2版)【创建NDK工程】

创建NDK工程 下面通过DevEco Studio的NDK工程模板&#xff0c;来演示如何创建一个NDK工程。 说明 不同DevEco Studio版本的向导界面、模板默认参数等会有所不同&#xff0c;请根据实际工程需要&#xff0c;创建工程或修改工程参数。 通过如下两种方式&#xff0c;打开工程创…

2024-07-27 Unity Excel —— 使用 EPPlus 插件读取 Excel 文件

文章目录 1 前言2 项目地址3 使用方法3.1 写入 Excel3.2 读取 Excel3.3 读写 csv 文件 4 ExcelSheet 代码 1 前言 ​ 前几日&#xff0c;一直被如何在 Unity 中读取 Excel 的问题给困扰&#xff0c;网上搜索相关教程相对古老&#xff08;4、5 年以前了&#xff09;。之前想用 …

2024年最全网易大数据面试题及参考答案(3万字长文持续更新)

目录 如何评价新用户的留存指标有哪些? 游戏业务中有哪些常用指标? 怎么制定游戏业务的目标 游戏业务中哪三个业务最重要 数据分析指标的阈值怎么确定 怎么衡量你在业务部门的贡献 如何衡量一个活动的ROI 跟领导汇报游戏业务,你会选择哪5个指标,为什么 介绍一下Ha…

【openavis】明厨亮灶算法仓

明厨亮灶算法仓主要用于学校食堂&#xff0c;餐厅等饮食卫生安全监管场景&#xff0c;目前包含的算法如下&#xff1a; 算法类型 算法卡片 明厨亮灶算法仓 老鼠检测 垃圾桶未盖 厨师服检测 厨师帽检测 口罩检测 手套检测 动火离人 1. 算法规格介绍&#xff1a; 算…