目标:

用栈来自己编写程序,实现四则运算

拆解:

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++用栈实现四则运算_数据结构之线性结构——栈的四则运算实现相关推荐

  1. python 栈实现 加减乘除_数据结构与算法(六):基于栈实现简单的四则运算

    栈,是一种操作受限的线性表,其操作规则为:后进者先出,先进者后出. 目录 题目需求: 给定一个字符串,形如"1+6*5/3-8",根据其内容,计算结果,此例结果为3. 解题思路: ...

  2. 数据结构之链表及其Java实现_数据结构之链表及其Java实现

    数据的存储一般分线性存储结构和链式存储结构两种.前者是一种顺序的存储方式,在内存中用一块连续的内存空间存储数据,即逻辑上相连的物理位置相邻,比较常见的就是数组:后者是一种链式存储方式,不保证顺序性,逻 ...

  3. 【数据结构(郝斌)】03线性结构-栈

    数据结构-栈 什么是栈 静态栈 动态栈 区别: 静态栈 动态栈 操作 栈的标准库操作 动态栈的操作实现 操作 void initStack(PSTACK s) void pushStack(PSTAC ...

  4. 【JS数据结构】线性结构——栈结构

    目录 一. 认识栈结构 1.栈结构 1.1 栈(stack) 1.2 生活中类似于栈的 1.3 栈结构的图解 1.4 程序中的函数调用栈是使用栈实现的呢? 1.5 栈面试题 二. 栈结构实现 1.栈的 ...

  5. java算法概述,Java数据结构与算法基础(一)概述与线性结构

    Java数据结构与算法基础(二)递归算法 Java数据结构与算法基础(一)概述与线性结构 学习目的:为了能更顺畅的读很多底层API代码和拓宽解决问题的思路 一.数据结构概述 1.数据结构是什么?数据与 ...

  6. 线性结构 —— 栈与队列

    [概述] stack 和 queue 是在程序设计中经常会用到的数据容器,STL 提供了方便的堆栈.队列的实现,准确地说,STL 中的 stack 与 queue 不同于 pair.vector 等容 ...

  7. 两栈共享存储空间(线性结构栈)

    #ifndef DOUBLESTACK_H #define DOUBLESTACK_H /*(1)引入1.如果需要两个相同类型的栈(顺序结构), 分别为了两个栈开辟存储空间.极有可能出现的情况是栈1已 ...

  8. 线性结构--栈--特点--结构--概念

    特殊线性表-栈: 与常规线性表有神么差别?在本质上是没有什么差别的,只是在运算规则上有较大的差距,具体请看以下介绍. 栈是被限制只能在一端进行插入和删除运算的线性表,可以使用的一端称为栈顶,不能使用的 ...

  9. 数据结构java实验 刘小晶_数据结构实例解析与实验指导:Java语言描述

    部分 知识提炼与实例解析 章 绪论 1.1 数据结构的基本概念 1.1.1 知识提炼 1.1.2 典型实例解析 1.1.3 实例练习 1.2 算法与算法分析 1.2.1 知识提炼 1.2.2 典型实例 ...

最新文章

  1. 10分钟搭建你的第一个图像识别模型 | 附完整代码
  2. C语言实现五子棋游戏(可N*N棋盘)
  3. 一键生成CSDN文章的思维导图目录
  4. 【Google Play】Google Play 开放式测试 ( 简介 | 发布开放式测试版本 )
  5. python3之SQLAlchemy
  6. 013_JDK的Collections类的sort方法的实现
  7. linux 安装wdcp控制面板
  8. 计算mView在view周围的位置
  9. Python装饰器详解,详细介绍它的应用场景
  10. c语言混响,混响也是大学问,c与数字混响的区别-文章-数字音视工程网DAV01.COM...
  11. mysql 取substring_如何在MySQL中的字段上应用Substring()以获取字符串的一部分?
  12. 手机有信号但是连不上网是怎么回事?
  13. 【第四章】NB-IoT模组BC95 利用串口调试助手接入华为(电信)平台
  14. Flask深度学习模型服务端部署
  15. 安装ubuntu系统,保留原始分区数据
  16. als算法参数_spark ALS算法
  17. Python学习之集合练习(协助学生做问卷调查)
  18. 2019复旦大学计算机分数线,2019复旦大学录取分数线(在各省市录取数据)
  19. 讨论k值以及初始聚类中心对聚类结果的影响_K均值聚类需要标准化数据吗
  20. g80 architecture overview

热门文章

  1. 一步步用ABAP Development Tools连接SAP云平台上的ABAP编程环境
  2. Mockito框架学习 - how does expected annotation work
  3. Cordova Embedded Server
  4. JavaScript对象根据自定义属性进行排序
  5. SAP C/4HANA Sales Cloud使用OData服务和第三方系统集成的一个具体例子
  6. CRM和C4C product category hierarchy的可编辑性控制逻辑
  7. html点击按钮执行php代码,php代码在html文件里面执行的示例
  8. 电流源并联怎么合并_一种特殊的并联切换电力系统,长见识了
  9. go语言调用python_Golang中调用Python3
  10. Mybatis快速入门的代码实现及报错处理解决org.apache.ibatis.exceptions.PersistenceException