博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
栈应用 - 后缀表达式的计算
阅读量:4910 次
发布时间:2019-06-11

本文共 1361 字,大约阅读时间需要 4 分钟。

有关栈API详情參看我的还有一篇博文:

遍历后缀表达式中的数字和符号

对于数字:进栈
对于符号:
从栈中弹出右操作数
从栈中弹出左操作数
依据符号进行运算
将运算结果压入栈中
遍历结束:栈中的唯一数字为计算结果

#include 
#include "LinkStack.h"int isNumber3(char c){ return ('0' <= c) && (c <= '9');}int isOperator3(char c){ return (c == '+') || (c == '-') || (c == '*') || (c == '/');}int value(char c){ return (c - '0');}int express(int left, int right, char op){ int ret = 0; switch (op) { case '+': ret = left + right; break; case '-': ret = left - right; break; case '*': ret = left * right; break; case '/': ret = left / right; break; default: break; } return ret;}int compute(const char* exp){ LinkStack* stack = LinkStack_Create(); int ret = 0; int i = 0; while (exp[i] != '\0') { if (isNumber3(exp[i])) { LinkStack_Push(stack, (void*)value(exp[i])); } else if (isOperator3(exp[i])) { int right = (int)LinkStack_Pop(stack); int left = (int)LinkStack_Pop(stack); int result = express(left, right, exp[i]); LinkStack_Push(stack, (void*)result); } else { printf("Invalid expression!"); break; } i++; } if ((LinkStack_Size(stack) == 1) && (exp[i] == '\0')) { ret = (int)LinkStack_Pop(stack); } else { printf("Invalid expression!"); } LinkStack_Destroy(stack); return ret;}int main(){ printf("8 + (3 - 1) * 5 = %d\n", compute("831-5*+")); return 0;}
project文件详情:

转载于:https://www.cnblogs.com/yfceshi/p/7294007.html

你可能感兴趣的文章
mongodb index 的background 及集群的索引建立
查看>>
判断两个控件在同一个Window上是否有重叠
查看>>
Android+Jquery Mobile学习系列(3)-创建Android项目
查看>>
android:inputType参数类型说明
查看>>
android 抽屉式滑动demo
查看>>
Swift语言Storyboard教程:第一部分
查看>>
unload事件Ajax提交问题
查看>>
代码工程flex不显示GIF图片问题
查看>>
Kotlin 初窥门径[2]:流程控制
查看>>
Android利用Socket与硬件通信之智能家居APP
查看>>
Idea中提交SVN或git时,忽略某些文件不提交
查看>>
20135236、20135206第一次试验报告
查看>>
Java的“Goto”与标签
查看>>
python 爬虫
查看>>
C# 支持两种形式的字符串:规则字符串和逐字字符串
查看>>
css z-index
查看>>
Javascript网页刷新方法集锦
查看>>
SQL触发器
查看>>
阿里云CentOS环境下tomcat启动超级慢的解决方案
查看>>
c/c++中的&、|和&&、||
查看>>