数据结构 c++用栈实现四则运算_数据结构之线性结构——栈的四则运算实现
目标:
用栈来自己编写程序,实现四则运算
拆解:
1. 任何表达式都由 操作数、运算符、定界符 组成
- 操作数即为参与计算的数值
- 运算符(这里只讨论算术运算符)有优先级之分
- 定界符可以改变运算次序
2. 如何实现各符功能?
- 首先将操作数与运算符分开,故将设置两个栈分别存储表达式中的运算符与操作数
- 主要难点在于实现优先级——在这里我们进行分类讨论
#1. 如果后面的符号优先级比前面的优先级符号高,则应先执行后面的符号,再执行前面的符号。
比如:5 + 4 * 3 ‘*’的优先级比‘+’高,故先执行后面的计算,再执行前面的
——于是在这里,我们就识别出了‘栈’的条件——“后进先出”
#2. 如果后面的符号优先级比前面的符号低,就先执行完前面符号的运算,再将后面符号入栈。
比如:5 * 4 + 3 ‘+’的优先级比‘*’低,故先执行(5 * 4),得到新的操作数 20, 再用操作符‘+’运算
接下来用图来解析栈内的运行过程
代码实现
//四则运算实现
int stackArithmetic(char str[])
{seqStack nums, operators;initialStack(nums);initialStack(operators);int i = 0,tmp = 0, n1, n2;char x;//while(str[i] || stackEmpty(operators) !=OK)while(str[i]){if (str[i] >= '0' && str[i] <='9')//若为含义为数字,则将其转为int{tmp = tmp * 10 + str[i] - '0';}else{pushStsck(nums,tmp);//入栈stackTop(operators, x);//将首元素赋给xtmp = 0;//重置为0if (stackEmpty(operators) || (x =='(' && str[i] !=')')|| //未成对,保持规则运算(Priority(str[i])>Priority(x)))//优先级比较{pushStsck(operators, str[i]);}if (x =='(' && str[i] ==')') //若在括号内{popStack(operators, x);//成对,释放}if ( (str[i]==')' && x !='(')|| //出栈运算(Priority(str[i])<=Priority(x))){popStack(operators, x);popStack(nums, n1);popStack(nums, n2);switch(x){case '+':pushStsck(nums, n1 + n2);break;case '-':pushStsck(nums, n2 - n1);break;case '*':pushStsck(nums, n1 * n2);break;case '/':pushStsck(nums, n2 / n1);break;}}if(str[i]=='0' && stackEmpty(operators)){stackTop(nums, n1);//若为空,则出最终值}}i++;}return n1;
}
数据结构 c++用栈实现四则运算_数据结构之线性结构——栈的四则运算实现相关推荐
- python 栈实现 加减乘除_数据结构与算法(六):基于栈实现简单的四则运算
栈,是一种操作受限的线性表,其操作规则为:后进者先出,先进者后出. 目录 题目需求: 给定一个字符串,形如"1+6*5/3-8",根据其内容,计算结果,此例结果为3. 解题思路: ...
- 数据结构之链表及其Java实现_数据结构之链表及其Java实现
数据的存储一般分线性存储结构和链式存储结构两种.前者是一种顺序的存储方式,在内存中用一块连续的内存空间存储数据,即逻辑上相连的物理位置相邻,比较常见的就是数组:后者是一种链式存储方式,不保证顺序性,逻 ...
- 【数据结构(郝斌)】03线性结构-栈
数据结构-栈 什么是栈 静态栈 动态栈 区别: 静态栈 动态栈 操作 栈的标准库操作 动态栈的操作实现 操作 void initStack(PSTACK s) void pushStack(PSTAC ...
- 【JS数据结构】线性结构——栈结构
目录 一. 认识栈结构 1.栈结构 1.1 栈(stack) 1.2 生活中类似于栈的 1.3 栈结构的图解 1.4 程序中的函数调用栈是使用栈实现的呢? 1.5 栈面试题 二. 栈结构实现 1.栈的 ...
- java算法概述,Java数据结构与算法基础(一)概述与线性结构
Java数据结构与算法基础(二)递归算法 Java数据结构与算法基础(一)概述与线性结构 学习目的:为了能更顺畅的读很多底层API代码和拓宽解决问题的思路 一.数据结构概述 1.数据结构是什么?数据与 ...
- 线性结构 —— 栈与队列
[概述] stack 和 queue 是在程序设计中经常会用到的数据容器,STL 提供了方便的堆栈.队列的实现,准确地说,STL 中的 stack 与 queue 不同于 pair.vector 等容 ...
- 两栈共享存储空间(线性结构栈)
#ifndef DOUBLESTACK_H #define DOUBLESTACK_H /*(1)引入1.如果需要两个相同类型的栈(顺序结构), 分别为了两个栈开辟存储空间.极有可能出现的情况是栈1已 ...
- 线性结构--栈--特点--结构--概念
特殊线性表-栈: 与常规线性表有神么差别?在本质上是没有什么差别的,只是在运算规则上有较大的差距,具体请看以下介绍. 栈是被限制只能在一端进行插入和删除运算的线性表,可以使用的一端称为栈顶,不能使用的 ...
- 数据结构java实验 刘小晶_数据结构实例解析与实验指导:Java语言描述
部分 知识提炼与实例解析 章 绪论 1.1 数据结构的基本概念 1.1.1 知识提炼 1.1.2 典型实例解析 1.1.3 实例练习 1.2 算法与算法分析 1.2.1 知识提炼 1.2.2 典型实例 ...
最新文章
- 10分钟搭建你的第一个图像识别模型 | 附完整代码
- C语言实现五子棋游戏(可N*N棋盘)
- 一键生成CSDN文章的思维导图目录
- 【Google Play】Google Play 开放式测试 ( 简介 | 发布开放式测试版本 )
- python3之SQLAlchemy
- 013_JDK的Collections类的sort方法的实现
- linux 安装wdcp控制面板
- 计算mView在view周围的位置
- Python装饰器详解,详细介绍它的应用场景
- c语言混响,混响也是大学问,c与数字混响的区别-文章-数字音视工程网DAV01.COM...
- mysql 取substring_如何在MySQL中的字段上应用Substring()以获取字符串的一部分?
- 手机有信号但是连不上网是怎么回事?
- 【第四章】NB-IoT模组BC95 利用串口调试助手接入华为(电信)平台
- Flask深度学习模型服务端部署
- 安装ubuntu系统,保留原始分区数据
- als算法参数_spark ALS算法
- Python学习之集合练习(协助学生做问卷调查)
- 2019复旦大学计算机分数线,2019复旦大学录取分数线(在各省市录取数据)
- 讨论k值以及初始聚类中心对聚类结果的影响_K均值聚类需要标准化数据吗
- g80 architecture overview
热门文章
- 一步步用ABAP Development Tools连接SAP云平台上的ABAP编程环境
- Mockito框架学习 - how does expected annotation work
- Cordova Embedded Server
- JavaScript对象根据自定义属性进行排序
- SAP C/4HANA Sales Cloud使用OData服务和第三方系统集成的一个具体例子
- CRM和C4C product category hierarchy的可编辑性控制逻辑
- html点击按钮执行php代码,php代码在html文件里面执行的示例
- 电流源并联怎么合并_一种特殊的并联切换电力系统,长见识了
- go语言调用python_Golang中调用Python3
- Mybatis快速入门的代码实现及报错处理解决org.apache.ibatis.exceptions.PersistenceException