数据结构实验 第二单元 构造计算器
2015-12-18 12:16
323 查看
首先自己百度下面两个名词
前缀表达式、后缀表达式
我们计算机 能直接计算的是后缀表达式。
前缀表达式:1+2*3+4 = 11
后缀表达式:1 2 3 *+4+ = 11
下面是计算后缀表达式:
前缀表达式、后缀表达式
我们计算机 能直接计算的是后缀表达式。
前缀表达式:1+2*3+4 = 11
后缀表达式:1 2 3 *+4+ = 11
/// <summary> /// 将前缀表达式转换为后缀表达式 /// </summary> /// <param name="strInfix"></param> /// <returns></returns> private string InfixToSuffix(string strInfix) { LinkStack ls = new LinkStack(); System.Text.StringBuilder sb = new StringBuilder(200); string str = strInfix.Trim(); foreach(var word in str) { if (char.IsNumber(word)) { sb.Append(word); } else { //非数字,先加个空格。 sb.Append(' '); if (word == '(') { ls.Push(word); } else if (word == ')') { while (!ls.Empty()) { char ch = (char)ls.Pop(); if (ch == '(') { break; } sb.Append(ch); } } else if (word == '+' || word == '-') { while(!ls.Empty()) { char ch = (char)ls.Top(); if (ch == '+' || ch == '-' || ch == '*' || ch == '/') { sb.Append((char)ls.Pop()); } else if (ch == '(') { break; } } ls.Push(word); } else if (word == '*' || word == '/') { while (!ls.Empty()) { char ch = (char)ls.Top(); if (ch == '*' || ch == '/') { sb.Append((char)ls.Pop()); } else if (ch == '+' || ch == '-' || ch == '(') { break; } } ls.Push(word); } else { } } } while (!ls.Empty()) { sb.Append(ls.Pop()); } return sb.ToString(); }
下面是计算后缀表达式:
/// <summary> /// 计算后缀表达式 /// </summary> /// <param name="strSuffix"></param> /// <returns></returns> private int CalculateSuffix(string strSuffix) { LinkStack ls = new LinkStack(); int num=0; Boolean numState = false; foreach (var word in strSuffix) { if (char.IsNumber(word)) { numState = true; num = num*10+int.Parse(word.ToString()); } else { //将数入栈 if (numState == true) { ls.Push(num); num = 0; } numState=false; if (word != ' ') { //忽略空白 int num2 = (int)ls.Pop(), num1 = (int)ls.Pop(); switch(word) { case '+': ls.Push(num1 + num2); break; case '-': ls.Push(num1 - num2); break; case '*': ls.Push(num1 * num2); break; case '/': ls.Push(num1 / num2); break; } } } } return (int)ls.Pop(); }
相关文章推荐
- 数据结构实验 第二单元 汉诺塔(非递归,用栈模拟递归)
- 数据结构实验 第二单元 汉诺塔(非递归,用栈模拟递归)
- 数据结构实验 第二单元 括号匹配
- 数据结构实验 第二单元 括号匹配
- 数据结构实验 第二单元 栈操作
- 数据结构实验 第二单元 栈操作
- 数据结构之插入排序
- <LeetCode OJ> 8. String to Integer (atoi)
- 数据结构实验之查找六:顺序查找
- <LeetCode OJ> 148. Sort List
- 学期末数据结构教程总结
- 数据结构总结
- 数据结构实践——用哈希法组织关键字
- 数据结构实践——用哈希法组织关键字
- 本学期数据结构学习总结
- 数据结构实践——验证算法
- 数据结构期末总结
- 数据结构实践——是否二叉排序树?
- 第16周SHH数据结构-【项目1-验证算法(2)希尔排序】
- 数据结构实践——二叉树排序树中查找的路径