数据结构实验之栈二:一般算术表达式转换成后缀式 SDUT 2132
2015-08-17 10:53
429 查看
题目描述
对于一个基于二元运算符的算术表达式,转换为对应的后缀式,并输出之。输入
输入一个算术表达式,以‘#’字符作为结束标志。输出
输出该表达式转换所得到的后缀式。示例输入
a*b+(c-d/e)*f#
示例输出
ab*cde/-f*+
转的,解释的挺详细。
#include<stdio.h> int swi(char c))//把输入的运算符转换成数字来比较优先级 { if(c=='+'||c=='-') return 1 ; if(c=='*'||c=='/') return 2 ; if(c=='(') return 3 ; if(c==')') return 4 ; return 0 ; } int main() { int top = 0 ; char c=0, stack[100] ; while(scanf("%c", &c), c!='#') { if(c>='a'&&c<='z')//判断字符是不是运算符 不是就输出 { printf("%c", c) ; } else { if(top==0)//判断b栈是不是为空 是就直接入栈 { top++ ;//栈顶向上移一位 stack[top] = c ;//增加一个成员 } else if(swi(c)>=swi(stack[top]))]))//如果是运算符 而且输入的比栈顶运算符优先级高 { if(swi(c)==4))//如果是')'就把'('之前的运算符全部输出 { while(stack[top]!='(') { printf("%c",stack[top--]) ; } top-- ; } else { top++ ;//如果不是 就入栈 stack[top] = c ; } } else//如果优先级比它低 { if(stack[top]!='(')//如果不是'(' 就把它(优先级高)出栈 { printf("%c", stack[top]) ; stack[top] = c ; } else { top++ ; stack[top] = c ;//如果是'(' 就直接入栈 } } } } while(top!=0)//判断栈是否为空 不为空就全部出栈 { printf("%c", stack[top]) ; top-- ; } printf("\n") ; return 0 ; }
相关文章推荐
- 数据结构 二路归并排序的实现
- POJ 3750 小孩报数问题 数据结构水
- 《数据结构与算法分析——c语言描述》读后笔记 7
- 使用逆波兰式(后缀表达式)实现多功能计算器
- 数据结构:快状链表(数组链表联合)
- 数据结构 字符串二分查找正确实现
- 数据结构-二叉搜索树(Binary Search Tree)的C++实现模板
- 数据结构之二叉树的遍历
- 数据结构 堆排序的实现
- 数据结构 二叉树遍历之前序、中序、后序以及层次遍历实现
- 数据结构 基数排序的实现
- 数据结构-树的存储结构
- 自己动手实现数据结构——排序算法2 (希尔、快速、堆)(C++实现)
- 数据结构-树
- 数据结构-队列2
- 数据结构-队列1
- 【四】nginx的数据结构(2)——自己动手重写红黑树
- 数据结构和算法系列15 线索二叉树
- 数据结构:二叉树(前,中,后,层次)非递归遍历。
- 【C/C++学院】0828-数组与指针/内存分配/数据结构数组接口与封装