当前位置: 首页 > news >正文

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; // 结束程序
}

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Element UI DatePicker选择日期范围区间默认显示前一个月和本月
  • Java字符串中的第一个唯一字符
  • Python机器学习入门:从理论到实践
  • 信号【Linux】
  • SenseVoice 实测,阿里开源语音大模型,识别效果和效率优于 Whisper,居然还能检测掌声、笑声!5分钟带你部署体验
  • JMeter请求导出Excel
  • 排序二叉树(c++)
  • Go基础编程 - 12 -流程控制
  • DPKG(Debian / Ubuntu包管理工具)的深入探索与使用
  • 【人工智能】机器学习 -- 决策树(乳腺肿瘤数)
  • java面试题,有synchronized锁,threadlocal、数据可以设置默认值、把redis中的json转为对象
  • 使用内网穿透工具 frp 发布内网 web 站点
  • WebGoC题解(13) 狐猬编程:GoC L4 结业测试 第4题 找木柴
  • 自动驾驶---视觉Transformer的应用
  • 工具(linux)
  • 【162天】黑马程序员27天视频学习笔记【Day02-上】
  • AzureCon上微软宣布了哪些容器相关的重磅消息
  • Centos6.8 使用rpm安装mysql5.7
  • Effective Java 笔记(一)
  • uva 10370 Above Average
  • 聊聊directory traversal attack
  • 前嗅ForeSpider中数据浏览界面介绍
  • 区块链将重新定义世界
  • 手写一个CommonJS打包工具(一)
  • 数据科学 第 3 章 11 字符串处理
  • 吐槽Javascript系列二:数组中的splice和slice方法
  • 我的zsh配置, 2019最新方案
  • 我的业余项目总结
  • 新手搭建网站的主要流程
  • HanLP分词命名实体提取详解
  • ‌前端列表展示1000条大量数据时,后端通常需要进行一定的处理。‌
  • # 数论-逆元
  • ###51单片机学习(1)-----单片机烧录软件的使用,以及如何建立一个工程项目
  • #QT(QCharts绘制曲线)
  • $().each和$.each的区别
  • (1)(1.13) SiK无线电高级配置(五)
  • (20)目标检测算法之YOLOv5计算预选框、详解anchor计算
  • (51单片机)第五章-A/D和D/A工作原理-A/D
  • (八)c52学习之旅-中断实验
  • (附源码)ssm捐赠救助系统 毕业设计 060945
  • (教学思路 C#之类三)方法参数类型(ref、out、parmas)
  • (论文阅读26/100)Weakly-supervised learning with convolutional neural networks
  • (数据大屏)(Hadoop)基于SSM框架的学院校友管理系统的设计与实现+文档
  • (四)linux文件内容查看
  • (一)认识微服务
  • (已更新)关于Visual Studio 2019安装时VS installer无法下载文件,进度条为0,显示网络有问题的解决办法
  • (原)Matlab的svmtrain和svmclassify
  • (转)memcache、redis缓存
  • (转)shell调试方法
  • .gitignore文件设置了忽略但不生效
  • .net CHARTING图表控件下载地址
  • .NET Core MongoDB数据仓储和工作单元模式封装
  • .NET IoC 容器(三)Autofac
  • 。Net下Windows服务程序开发疑惑
  • ?.的用法