数据结构实验之栈二:一般算术表达式转换成后缀式(手写栈)
来源:互联网 发布:非网络收音机软件 编辑:程序博客网 时间:2024/05/17 07:39
数据结构实验之栈二:一般算术表达式转换成后缀式
Time Limit: 1000MS Memory limit: 65536K
题目描述
对于一个基于二元运算符的算术表达式,转换为对应的后缀式,并输出之。
输入
输入一个算术表达式,以‘#’字符作为结束标志。
输出
输出该表达式转换所得到的后缀式。
示例输入
a*b+(c-d/e)*f#
示例输出
ab*cde/-f*+解析: 其实对于栈的操作,大家更喜欢用stl,但是手写栈也是很重要的,可以让我们了解栈的内部操作;
对于这个题来说不用栈也行,用树的后序遍历更好。
讲一下核心内容:(1)、遇到字母一律输出;
(2)、遇到左括弧一律入栈;
(3)、遇到右括弧就把两个括弧之间的所有符号出栈输出,并且左括弧出栈;
(4)、遇到“+”或“-”,如果栈不空并且栈顶不是左括弧就出栈输出这一个栈顶,“+”或“-”入栈;
(5)、遇到“*”或“/”,如果栈不空并且栈顶不是左括弧并且栈顶是“*”或“/”,就把栈顶出栈输出,“*”或“/”入栈;
这是操作步骤,想问“+”、“-”、“*”、“/”为什么操作不一样,那就是符号优先级的问题了。 ///***********代码
#include <stdio.h> #include <stdlib.h> #define maxstact 1000 typedef char elemstack; typedef struct { elemstack *top; elemstack *base; int sizestack; } Sq; int initstack(Sq &L) { L.base=new elemstack[maxstact]; if(!L.base) exit(0); L.top=L.base; L.sizestack=maxstact; } int push(Sq &L,char s) { if(L.top-L.base>L.sizestack) return -1; *(L.top++)=s; return 0; } int pop(Sq &L) { if(L.top<=L.base) return -1; printf("%c",*(--L.top)); } int main() { Sq L; char a[1000],*s; int i; gets(a); initstack(L); for(i=0; a[i]!='#'; i++) { switch(a[i]) { case '(': push(L,a[i]); break; case ')': { while(L.top>L.base&&*(L.top-1)!='(') pop(L); L.top--; break; } case '+': { if(L.top>L.base&&*(L.top-1)!='(') pop(L); push(L,a[i]); break; } case '-': { if(L.top>L.base&&*(L.top-1)!='(') pop(L); push(L,a[i]); break; } case '*': { if(L.top>L.base&&*(L.top-1)!='('&&(*(L.top-1)=='*'||*(L.top-1)=='/')) pop(L); push(L,a[i]); break; } case '/': { if(L.top>L.base&&*(L.top-1)!='('&&(*(L.top-1)=='*'||*(L.top-1)=='/')) pop(L); push(L,a[i]); break; } default: { printf("%c",a[i]); break; } } } while(L.top>L.base) { pop(L); } return 0; }
0 0
- 数据结构实验之栈二:一般算术表达式转换成后缀式(手写栈)
- SDUT2132数据结构实验之栈二:一般算术表达式转换成后缀式(栈)
- 数据结构实验之栈二:一般算术表达式转换成后缀式(栈)
- 数据结构实验之栈二:一般算术表达式转换成后缀式(栈)
- 数据结构实验之栈二:一般算术表达式转换成后缀式(java实现)
- [SDUT](2132)数据结构实验之栈二:一般算术表达式转换成后缀式 ---栈
- 数据结构实验之栈二:一般算术表达式转换成后缀式
- 数据结构实验之栈二:一般算术表达式转换成后缀式
- 数据结构实验之栈二:一般算术表达式转换成后缀式
- 数据结构实验之栈二:一般算术表达式转换成后缀式
- 数据结构实验之栈二:一般算术表达式转换成后缀式
- 数据结构实验之栈二:一般算术表达式转换成后缀式
- SDUT 2132 数据结构实验之栈二:一般算术表达式转换成后缀式
- 数据结构实验之栈二:一般算术表达式转换成后缀式
- SDUT OJ 数据结构实验之栈二:一般算术表达式转换成后缀式
- 数据结构实验之栈二:一般算术表达式转换成后缀式
- SDUT 2132 数据结构实验之栈二:一般算术表达式转换成后缀式
- 数据结构实验之栈二:一般算术表达式转换成后缀式
- swift - 回调
- 用进制思想解决组合问题
- 一幅图看懂委托
- Environment 类
- python-dir()函数
- 数据结构实验之栈二:一般算术表达式转换成后缀式(手写栈)
- Swift-元组
- Linux修改eth2到eth0
- 2016-7-30 夜班工作日记
- java的IO
- 开发思路—30/7/2016
- 在 CentOS6.5 上安装 MySQL5.7配置
- Leetcode 228. Summary Ranges (Medium) (cpp)
- Linux -- 程序管理