栈的应用:C实现简单计算器(表达式的计算)

作为栈的著名应用,表达式的计算可以用下面方法实现:

首先建立两个栈,操作数栈NUM_S和运算符栈OPR_S。

其中,操作数栈用来存储表达式中的操作数;运算符栈用来存储表达式中的运算符。可以用字符‘=’来表示表达式结束符。

自左至右的扫描待处理的表达式,并假设当前扫描到的符号为W,根据不同的符号W做如下不同的处理:

1.若W为操作数,则将W压入操作数栈NUM_S,且继续扫描下一个字符;

2.若W为运算符,则根据运算符的性质做相应的处理:

(0)若符号栈为空,无条件入栈当前指针指向的字符

(1)若w为不大于运算符栈栈顶的运算符,则从操作数栈NUM_S中弹出两个操作数,设先后弹出的操作数为a、b,再从运算符栈

OPR_S中弹出一个运算符,比如为+,然后作运算a+b,并将运算结果压入操作数栈NUM_S。

(2)若w为左括号或者运算符的优先级大于运算符栈栈顶的运算符,则将运算符W压入运算符栈OPR_S,并继续扫描下一个字符。

(3)若运算符W为右括号,循环操作(设先后弹出的操作数为a、b,再从运算符栈OPR_S中弹出一个运算符,比如为+,然后作运

算a+b, 并将运算结果压入操作数栈NUM_S),直到从运算符栈中弹出第一个左括号。

(4)若运算符W为表达式结束符‘=’,循环操作(设先后弹出的操作数为a、b,再从运算符栈OPR_S中弹出一个运算符,比如为

+,然后作运算a+b, 并将运算结果压入操作数栈NUM_S),直到运算符栈为空为止。此时,操作数栈栈顶元素即为表达式的

值。

=========================================================================

举例: 计算 3+(5-2*3)/4-2=

(1) 开始栈为空,3入栈,+入栈,(无条件入栈,5入栈,-号优先级比(高,所以-号入栈,2入栈,*优先级比目前栈顶的-号优先级高,所以*入栈,3入栈,接着扫描到)括号,)括号不入栈

| | | |

--------- ----------

| 3 | | * |

--------- ----------

| 2 | | - |

用栈实现计算器c语言报告,利用栈实现c语言计算器相关推荐

  1. 用栈实现计算器c语言报告,请问,用c语言做一个计算器 包括+-*/()的运算 用栈 该怎么做...

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 #include #include #define UINT unsigned int struct LOGIC { UINT logic,site; } ...

  2. 进制转换数据结构c语言不用栈,急求!!!用数据结构(C语言)利用栈实现十进制向二(八)进制转换,要有注释,谢谢!...

    匿名用户 1级 2013-12-05 回答 #include #include #include typedef unsigned int data_type; //结点数62616964757a68 ...

  3. C语言逆序字符串数组,【C语言】利用栈将数组中字符串逆序

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 #include"stdio.h" #include"stdlib.h" #define STACK_INIT_S ...

  4. c语言倒序输出字符串数组,【C语言】利用栈将数组中字符串逆序

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 #include"stdio.h" #include"stdlib.h" #define STACK_INIT_S ...

  5. c语言实验题数组逆序,【C语言】利用栈将数组中字符串逆序

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 #include"stdio.h" #include"stdlib.h" #define STACK_INIT_S ...

  6. c语言利用栈将字符串逆序输出,【C语言】利用栈将数组中字符串逆序

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 #include"stdio.h" #include"stdlib.h" #define STACK_INIT_S ...

  7. c语言字符串反转栈,【C语言】利用栈将数组中字符串逆序

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 #include"stdio.h" #include"stdlib.h" #define STACK_INIT_S ...

  8. 天津理工上机c语言报告5,天津理工大学C语言上机报告题目加答案.doc

    天津理工大学C语言上机报告题目加答案.doc 下载提示(请认真阅读)1.请仔细阅读文档,确保文档完整性,对于不预览.不比对内容而直接下载带来的问题本站不予受理. 2.下载的文档,不会出现我们的网址水印 ...

  9. 天津理工上机c语言报告5,天津理工大学c语言上机报告7.doc

    天津理工大学c语言上机报告7 天津理工大学 计算机与通信工程学院 实验试做报告 2009 至 2010 学年 第 一 学期 课程名称高级语言程序设计I学生专业信息安全实验(7)实验名称指针实验课时4课 ...

  10. 中南民族大学c语言报告,中南民族大学信C语言实验报告.doc

    中南民族大学信C语言实验报告 中南民族大学管理学院 学生实验报告 课程名称: C语言程序设计 姓 名:微博@song-style是坏学长 学 号: 年 级: 2011 专 业:信息管理与信息系统 指导 ...

最新文章

  1. 为清理助手制作便利工具的技术实现
  2. 最好的浏览器排行榜_PG是最好的数据库;TiDB 4.0前瞻;SequoiaDB高可用原理;20c DG新特性... 数据库周刊第18期...
  3. python Windows和Linux路径表示问题
  4. 个人JS体系整理(二)
  5. Reuse library debug in Chrome - phase1 init phase
  6. asp.net repeater控件
  7. sql语句与mysql_MySQL-sql语句
  8. 关于继承的理解,自带有白话文,更适合编程小白新手,简单易理解
  9. 【php毕业设计】基于php+mysql的学生签到考勤系统设计与实现(毕业论文+程序源码)——学生签到考勤系统
  10. 寻找影响免疫浸润细胞的基因(一)
  11. python数字类型中包含了哪三种类型_Python数字类型中包含了________、________和_________三种类型。...
  12. 在线教育的优势强调实时直播、实时互动
  13. 你不知道的接近开关与PLC连接时如何判断用PNP还是NPN
  14. #51CTO学院四周年# 我和51cto的故事
  15. Mozilla 宣布 Firefox OS 应用原生支持 Android
  16. IBM车库创新:为科技创新头号工程打造共创引擎
  17. CF连杀喊话_WeGame修改
  18. 基于matlab的磁悬浮控制系统,基于MATLAB的磁悬浮球系统PID控制器设计与实现
  19. JavaScript高级第01天笔记
  20. [SDOI2013] 淘金

热门文章

  1. Installing Perl modules from CPAN
  2. linux下jdk1.8搭建笔记
  3. WINDOWS剪切板内容 复制到vi编辑器使用
  4. 用java开发的软件_java开发需要用到的软件有哪些
  5. 公钥加密_河海大学陆阳、李继国:不依赖双线性对的带关键字搜索的无证书公钥加密方案构造...
  6. 新手C语言学习第一课——小学生水平级
  7. 华为鲲鹏hcip认证题库
  8. 全国计算机等级考试准考证下载 怎么弄
  9. 五子棋java_Java五子棋小游戏完整源代码
  10. 给input设置css样式,input能改变css样式吗