• 原理说明
  • 代码实现

原理说明

表达式求值一定会出现表达式中运算符的优先级问题。

运算规则:
先乘除,后加减;
从左算到右;
先括号内,后括号外;

运算符优先表:

上面表格中有一些比较特殊的位置:
① 相等 = 左括号遇到右括号相等说明左右括号匹配。

① # 和 # 遇到的时候也是 = ,我们在表达式的左边人为的加上一个 # ,在表达式扫描完成之后再加上一个 # 表示表达式扫描完了。

③ 上面表格中出现的空白部分表示运算符遇到之后是毫无逻辑的,括号必须是相互匹配的,# 也必须是成对出现。

求表达式 4 + 2 * 3 - 10 / 5 的值。
计算顺序为:
4 + 2 * 3 - 10 / 5 =
4 + 6 - 10 / 5 =
10 - 10 / 5
= 10 - 2
= 8

上面的计算结果我们不去考虑,主要去考虑上面表达式运算的过程。

先定义一个栈用来存储操作数或结果:

定义另一个栈来存储运算符:

过程:
读入的运算符优先级比运算符栈顶元素的优先级高就入栈。
读入的运算符优先级比运算符栈顶元素的优先级低就弹出栈顶元素,然后弹出两个操作数进行计算,然后把计算结果入操作数或结果栈,然后继续向后读取进行判断。

 # 入运算符栈 , 4 入操作数或结果栈。运算符栈顶 # < + , + 入运算符栈。2 入操作数或结果栈。栈顶 + < * , * 入运算符栈。3 入操作数或结果栈。栈顶 * > - ,  运算符 * 出栈,操作数 2 3 出栈进行 * 运算。运算的结果 6 入操作数或结果栈。栈顶 + > - , 运算符 + 出栈,操作数 4 6 出栈进行 + 运算。运算的结果 10 入操作数或结果栈。运算符栈顶 # < - , - 入运算符栈。10入操作数或结果栈。运算符栈顶 - < / , / 入运算符栈。5入操作数或结果栈。运算符栈顶  / > # , 运算符 / 出栈,操作数 5 10 出栈进行 / 运算。运算的结果 2 入操作数或结果栈。运算符栈顶  - > # , 运算符 - 出栈,操作数 2 10 出栈进行 - 运算。运算的结果 8 入操作数或结果栈。运算符栈顶 # 遇到 # 相等,表达式求完。操作数或结果栈中是数据元素就是表达式计算完成之后的结果。

代码实现

顺序栈实现表达式求值(C语言实现)【栈】相关推荐

  1. C语言-用栈实现表达式求值

    目录 目的描述: 算法的基本思想: 错误点: 完整代码: 1.输入输出 2.栈操作函数包(数组堆栈.h) 3.实现表达式求值函数包(表达式求值.c) 4.测试输出: 目的描述: 算符优先算法要实现的是 ...

  2. 《Algorithms》—— Dijkstra 的双栈算术表达式求值算法

    想当年学数据结构的时候,一直觉得这个是我一辈子都搞不懂的一个东西.现在看看...还挺简单的... 重点在于如何解析由括号.运算符和数字组成的字符串,并按照正确的顺序完成各种初级算术操作.利用了两个栈( ...

  3. 栈 -- 顺序栈、链式栈的实现 及其应用(函数栈,表达式求值,括号匹配)

    文章目录 实现 顺序栈实现 链式栈实现 应用 函数栈 的应用 表达式求值中 的应用 括号匹配中 的应用 我们使用浏览器的时候经常会用到前进.后退功能. 依次访问完一串页面 a – b – c之后点击后 ...

  4. c语言编程实现表达式求值,c语言实现表达式求值的方法

    c语言实现表达式求值的方法 发布时间:2020-06-22 16:45:46 来源:亿速云 阅读:82 作者:Leah 这期内容当中小编将会给大家带来有关c语言实现表达式求值的方法,以专业的角度为大家 ...

  5. php表达式求值,PHP实现基于栈的后缀表达式求值功能

    本文实例讲述了PHP实现基于栈的后缀表达式求值功能.分享给大家供大家参考,具体如下: 后缀表达式概述 后缀表达式,指的是不包含括号,运算符放在两个运算对象的后面,所有的计算按运算符出现的顺序,严格从左 ...

  6. 栈在表达式求值中的应用

    大家熟悉的算数表达式 表达式求值是程序设计语言编译中一个最基本的问题,它的实现是栈应用的一个典型范例. 波兰数学家的灵感 中缀.后缀.前缀表达式 中缀表达式不仅依赖运算符的优先级,而且还要处理括号. ...

  7. 字符串算术表达式求值-简单计算器实现(栈)-数据结构和算法(Java)

    1 字符串算术表达式分类 字符串算术表达式分为前缀表达式.中缀表达式和后缀表达式.其中前缀表达式又称波兰表达式,后缀表达式基于前缀表达式,又称逆波兰表达式.下面给出百度百科关于几种表达式的定义: 前缀 ...

  8. 栈(模拟栈,表达式求值)

    模拟栈 #include<iostream>using namespace std;const int N=100010; int stk[N],tt;//向站内插入元素 void pus ...

  9. 【数据结构】用栈解决表达式求值问题

    题目:求4+4/2-9*3的值: 思路: ①:用一个字符型数组存放了表达式<4+4/2-9*3>: 1 char val[9] = {'4','+','4','/','2','-','9' ...

最新文章

  1. 深度学习、AI构图、智能裁图、显著性检测、美感质量评价
  2. 不安全网络中的数据安全传输利器——GnuPG(下)
  3. JavaScript之事件的绑定与移除
  4. harfbuzz安装位置 linux_最新Ubuntu 20.04 LTS已发布,在Win10中该如何进行安装和使用?...
  5. word上的花线是什么_微型断路器为什么叫空气开关,学问一大堆,该怎么接
  6. 海康威视面试-java应用开发
  7. 名校大厂 AI 高手云集,芒果 TV 音视频算法大赛硕果累累
  8. is present but cannot be translated into a null value due to being declared as a primitive type
  9. 复杂度分析当中的Θ、Ο、Ω
  10. C# web 后台页面间的跳转
  11. 软考程序员-C专题(1)
  12. Microsoft Visual Studio 2012 旗舰版 镜像 ISO 官方下载地址 旗舰版 序列号 SN VS2012_ULT_chs.iso
  13. 苹果手机显示有4g上不了网络连接服务器,苹果移动数据为什么叫蜂窝网络_蜂窝移动数据和4g有什么区别...
  14. 知乎python小项目_python项目知乎
  15. 计算机分区gpt无法启动项,双系统引导失败怎么修复?用bcd编辑MBR/GPT教程
  16. linux rm 文件找回_linux rm -rf * 文件恢复记
  17. matalb编写程序实现ps的“素描滤镜”
  18. 痴情只为无情苦,我欲真心对人 却成了种错情根,人活在世上 究竟是为了什么
  19. XP系统的机械硬盘无法读取,Ntoskrnl.exe损坏硬盘锁定还是坏道?
  20. 必备模块知识——继电器

热门文章

  1. 【颜值打分小程序】最火爆的“颜值测试”,做还是不做?(疯狂打call)
  2. 数据结构解析——小白也能看懂的单链表
  3. Java中的static———静态变量
  4. buu [GKCTF2020]小学生的密码学
  5. Fabric--CA 应用与配置
  6. 360加固分析(一)
  7. 【安全漏洞】某CMS后台防护逻辑漏洞导致GETSHELL
  8. 010 Android之逆向入门
  9. 求1!+2!+3!+...+10!的值
  10. ACM入门之【线段树习题】