## 1.中缀转后缀算法思想

 遍历字符串:一.若为数字1~9,进入后缀队列;二.若为左括号‘(’,进入符号栈;三.若为右括号’)‘,将栈顶元素压入后缀队列,直到栈顶为’(‘;四.若为‘+’,‘-‘,当栈不为空时,将栈顶元素压入后缀队列,直到栈顶为’(‘;五.若为’*‘,’\‘,当栈不为空且栈顶元素不为’+‘,’-‘时,将栈顶元素压入后缀队列,直到栈顶为’(‘。遍历结束时,若栈不为空,将栈内元素压入后缀队列。

2.后缀表达式求值算法思想

 遍历后缀表达式:一.若为数字1~9,进入数据栈;二.若为运算符:’+‘,’-‘,’*‘,’/‘,取出数据栈顶两个元素进行运算,结果压栈三.输出栈顶元素。

运行代码

// test0304.cpp : 定义控制台应用程序的入口点。
//#include "stdafx.h"
#include<iostream>
using namespace std;#include<stack>
#include<queue>
int transform_calculate(char* c);int _tmain(int argc, _TCHAR* argv[])
{char c1[]={"((1+2)*(3+4))"};transform_calculate(c1);char c2[]="(((1+2)*3-4)/5)";transform_calculate(c2);system("pause");return 0;
}
int transform_calculate(char* c)
{stack<char> s;stack<int> s1;queue<char> q;cout<<"中缀表达式:";for (int i = 0; i < strlen(c); i++){cout<<c[i]<<" ";}cout<<endl;for(int i=0;i<strlen(c);i++){if(c[i]>'0'&&c[i]<='9')q.push(c[i]);else if(c[i]=='(')s.push(c[i]);else if(c[i]==')'){while(s.top()!='('){q.push(s.top());s.pop();}s.pop();}else if(c[i]=='+'||c[i]=='-'){while(s.top()!='('){if(!s.empty()){q.push(s.top());s.pop();}}s.push(c[i]);}else if(c[i]=='*'||c[i]=='/'){while(s.top()!='('&&s.top()!='+'&&s.top()!='-'){if(!s.empty()){q.push(s.top());s.pop();}}s.push(c[i]);}}while(!s.empty()){q.push(s.top());s.pop();}cout<<"后缀表达式:";queue<char> p=q;while(!p.empty()){cout<<p.front()<<" ";p.pop();}cout<<endl;while(!q.empty()){if(q.front()>'0'&&q.front()<='9'){s1.push(q.front()-'0');q.pop();          }else if(q.front()=='+'){int i=s1.top();s1.pop();int j=s1.top();s1.pop();s1.push(j+i);q.pop();}else if(q.front()=='-'){int i=s1.top();s1.pop();int j=s1.top();s1.pop();s1.push(j-i);q.pop();}else if(q.front()=='*'){int i=s1.top();s1.pop();int j=s1.top();s1.pop();s1.push(j*i);q.pop();}else if(q.front()=='/'){int i=s1.top();s1.pop();int j=s1.top();s1.pop();s1.push(j/i);q.pop();}}cout<<"计算结果:";while(!s1.empty()){cout<<s1.top();s1.pop();}cout<<endl<<endl;return true;
}

运行结果

C++ 中缀转后缀并求值相关推荐

  1. 中缀转后缀并求值(多位数版本)

    //中缀转后缀思路: //转换过程需要用到栈,具体过程如下: //1)如果遇到操作数,我们就直接将其输出. //2)如果遇到操作符,则我们将其放入到栈中,遇到左括号时我们也将其放入栈中. //3)如果 ...

  2. iOS仿写计算器中缀转后缀 表达式求值

    github地址 iOS计算器 准备工作 由于OC没有自带的栈文件,只能链表模拟栈 typedef struct {char data[50];int top; }Stack;//符号栈 //之前把D ...

  3. 【数据结构与算法】中缀表达式 - 后缀表达式 - 求值

    中缀转后缀 #include <stdio.h> #include <stdlib.h>#define STACK_INIT_SIZE 20 #define STACKINCR ...

  4. c 语言表达式求值中缀变后缀,表达式求值关于中缀式转后缀式的问题!

    已结贴√ 问题点数:10 回复次数:6 表达式求值关于中缀式转后缀式的问题! 本人看资料的时候遇到一段代码,这段代码中转为后缀式的优先级那句不明白,请大神赐教,代码如下(c语言) #include # ...

  5. 前缀,中缀,后缀表达式求值

    前缀表达式求值: 对于一个前缀表达式的求值而言,首先要从右至左扫描表达式,从右边第一个字符开始判断,如果当前字符是数字则一直到数字串的末尾再记录下来,如果是运算符,则将右边离得最近的两个"数 ...

  6. 使用栈解决的一类经典问题:表达式转换及求值;中缀表达式;前缀表达式,后缀表达式,中缀转前缀;中缀转后缀;后缀表达式求值;波兰式,逆波兰式

    文章目录 背景知识 表达式转换问题(考研经典) 一:手工转换 (1)中缀转前缀和中缀转后缀 (2)前缀转中缀和后缀转中缀 二:用栈实现表达式转换 (1)中缀转后缀 (2)中缀转前缀 表达式计算问题(使 ...

  7. 表达式求值(中缀转后缀及后缀表达式求值)

    .中缀表达式转后缀表达式: 中缀表达式转后缀表达式遵循以下原则: 1.遇到操作数,直接输出: 2.栈为空时,遇到运算符,入栈: 3.遇到左括号,将其入栈: 4.遇到右括号,执行出栈操作,并将出栈的元素 ...

  8. c++实现中缀转前缀,中缀转后缀,后缀表达式求值

    中缀转前缀 思想: 用两个栈实现,规则如下: (1) 初始化两个栈:运算符栈S1和储存中间结果的栈S2: (2) 从右至左扫描中缀表达式: (3) 遇到操作数时,将其压入S2: (4) 遇到运算符时, ...

  9. 栈应用:后缀表达式求值

    在上一篇博客 栈应用:中缀表达式转后缀表达式 中我们知道如何通过栈将中缀表达式转为后缀表达式,这次我们继续用栈 来实现后缀表达式求值,结合上一篇博客. 上一篇博客中是用c语言实现的,由于c语言中不支持 ...

最新文章

  1. SQL Server 存储过程的分页方案比拼
  2. Qt / 模态对话框的实现
  3. javaScript面向对象编程学习(二)
  4. 前端学习(1546):MVC思想
  5. 有限状态机的C++实现(2)-bayonet开源网络服务器框架
  6. 格式化js/html代码的好工具
  7. mysql不记录binlog_MySQL不同的binlog_format会导致哪些SQL不会被记录
  8. 我设计的目录结构如此清楚,你为什么也会错
  9. C程序内存泄露检测工具——Valgrind
  10. 牛客网练习赛36 Ribbit的数列 分块
  11. b区计算机复试国家线,今年调剂太恐怖 B区考研分数线竟比A区高?
  12. 高等数学:一元函数微分学
  13. 非真实感渲染(NPR)论文理解及其复现(Unity) - 《Stylized Highlights for Cartoon Rendering and Animation》
  14. 【JS】购物车附带源码与素材图片压缩包
  15. 试题 算法训练 JAM计数法
  16. 程序员CMD命令大全
  17. AVI 视频文件的播放
  18. 汽车生产线下线检测仪(EOL)的功能和使用
  19. 【深度学习】-Imdb数据集情感分析之模型对比(4)- CNN-LSTM 集成模型
  20. 人人影视看来是第二个verycd厉害

热门文章

  1. 刘海屏启动页全屏适配
  2. wgan 不理解 损失函数_WGAN学习笔记
  3. hihocoder #1115 : 诺兹多姆(dfs爆搜)
  4. BraTS19_summary
  5. 利用对于kaggle商品图片的分类
  6. 0-1背包(贪心法)
  7. 6月6本程序员新书将与您见面,涉及Spring、算法、JavaScript等
  8. “AI竞赛”相关网站-FlyAI(可能会泪目)
  9. 尘埃落定 所有你想了解的Apple Watch综述
  10. python速度提高了吗_这一行代码,能让你的 Python运行速度提高100倍