#include <iostream>
using namespace std;
#define MaxSize 50
typedef char ElemType;
typedef struct
{ElemType data[MaxSize];int top;
} SqStack;//栈初始化
void initStack(SqStack &S)
{S.top = -1;
}
//判断栈空
bool stackEmpty(SqStack S)
{if(S.top == -1)return true;elsereturn false;
}
//入栈
bool push(SqStack &S,ElemType x)
{if(S.top == MaxSize-1)return false;S.top++;S.data[S.top] = x;return true;
}
//出栈
bool pop(SqStack &S,ElemType &x)
{if(S.top == -1)return false;x = S.data[S.top--];return true;
}
//读栈顶元素
bool getTop(SqStack S,ElemType &x)
{if(S.top == -1)return false;x = S.data[S.top];return true;
}
//中缀转后缀函数
bool reversePolish(ElemType str[],int length)
{SqStack S;//声明符号栈initStack(S);//符号栈初始化string polish;//声明后缀表达式字符串int i;//i是遍历中缀表达式的下标for(i=0; i<length; i++){switch(str[i]){case '(':push(S,str[i]);//左括号直接入栈break;case ')'://遇到右括号,不入栈,弹出栈中( 上面的所有符号并加入后缀表达式,最后把左括号弹出ElemType topElem,x;getTop(S,topElem);//读取栈顶元素while(topElem != '('){pop(S,x);polish+=x;if(stackEmpty(S)){//cout<<"栈空!"<<endl;break;}elsegetTop(S,topElem);}pop(S,x);break;case '+':case '-'://先弹出比自己级别高的或者与自己同级的运算符,加入后缀表达式//cout<<"是+或者-,入栈"<<endl;if(!stackEmpty(S))//如果栈非空{ElemType topElem;getTop(S,topElem);//读取栈顶元素while(topElem == '+' || topElem == '-' || topElem == '*' || topElem == '/'){ElemType x;pop(S,x);polish+=x;if(stackEmpty(S)){//cout<<"栈空!"<<endl;break;}elsegetTop(S,topElem);}}push(S,str[i]);//弹出后自己入栈break;case '*':case '/'://先弹出比自己级别高的或者与自己同级的运算符,加入后缀表达式//cout<<"是*或者/,入栈"<<endl;if(!stackEmpty(S))//如果栈非空{ElemType topElem;getTop(S,topElem);//读取栈顶元素while(topElem == '*' || topElem == '/'){ElemType x;pop(S,x);polish+=x;if(stackEmpty(S)){// cout<<"栈空!"<<endl;break;}elsegetTop(S,topElem);}}push(S,str[i]);//弹出后自己入栈break;default:polish+=str[i];}}while(!stackEmpty(S)){ElemType x;pop(S,x);polish+=x;}cout<<"后缀表达式为:"<<endl;cout<<polish;return true;
}
int main()
{ElemType str[MaxSize];int length;cout<<"请输入中缀字符串长度:";cin>>length;cout<<"请输入中缀表达式:"<<endl;cin>>str;cout<<"您输入的中缀表达式为:";cout<<str<<endl;reversePolish(str,length);return 0;
}

代码有个缺点,输入的时候必须输入要测试的中缀字符串长度,我懒得改了~~其他应该还是没问题的

C++中缀表达式转后缀表达式 中缀转后缀c++相关推荐

  1. java中缀表达式转后缀表达式(逆波兰算法)

    四则运算是栈的重要应用之一 中缀表达式转后缀表达式(逆波兰算法)过程 从左到右遍历中缀表达式 数字直接输出为后缀表达式一部分 如果是符号,则判断与栈顶元素的优先级 高于栈顶元素优先级直接入栈 低于或等 ...

  2. java中缀表达式转后缀表达式_数据结构Java实现06----中缀表达式转换为后缀表达式...

    本文主要内容: 表达式的三种形式 中缀表达式与后缀表达式转换算法 一.表达式的三种形式: 中缀表达式:运算符放在两个运算对象中间,如:(2+1)*3.我们从小做数学题时,一直使用的就是中缀表达式. 后 ...

  3. 数据结构实验——中缀表达式转为后缀表达式

    一.实验内容: 编写程序,实现中缀表达式化为后缀式输出. 已知中缀表达式中操作数全部用小写英文字母表示,运算符只含有+, -, *, /四种,定界符只有( )以及结束符#. 二.程序源代码: 运行示例 ...

  4. 九、中缀表达式转为后缀表达式

    使用栈将中缀表达式转为后缀表达式并计算 一.中缀表达式转换为后缀表达式 由于后缀表达式适合计算式进行计算,但是人对于较长的中缀表达式,很难将中缀表达式直接转换为后缀表达式,于是我们使用栈来实现中缀表达 ...

  5. c语言表达式的后缀,中缀表达式转换成后缀表达式C语言程序(一)

    逆波兰表达式(Reverse Polish Notation)又叫后缀表达式.它是一种非常的表达式,可以将复杂的表达式转换成可以依靠简单的操作得到结果的表达.下面这段C语言即是用于实现将中缀表达式转换 ...

  6. 将中缀表达式转化为后缀表达式

    我们把平时所用的标准四则运算表达式,即"9+(3-1)*3+10/2"叫做中缀表达式.因为所有的运算符号都在两数字的中间,现在我们的问题就是中缀到后缀的转化. 中缀表达式" ...

  7. 百度面试 中缀表达式变成后缀表达式

    初始化两个栈:运算符栈s1和储存中间结果的栈s2: 从左至右扫描中缀表达式: 遇到操作数时,将其压s2: 遇到运算符时,比较其与s1栈顶运算符的优先级: 如果s1为空,或栈顶运算符为左括号" ...

  8. python【数据结构与算法】表达式(前缀中缀后缀表达式)与Two fork tree

    文章目录 1 相关概念 2 与二叉树关系 3 表达式转换 4 另一种方法 1 相关概念 前缀表达式(Prefix Notation)是指将运算符写在前面操作数写在后面的不包含括号的表达式,而且为了纪念 ...

  9. 数据结构——栈——中缀表达式和后缀表达式

    什么是中缀表达式,什么是后缀表达式 我们一般看见的多项式计算都是中缀表达式构成的:1+2*3+4/3 类似这种,为什么说是中缀呢?因为它的计算符号都是在两个数中间的. 那么自然而然的明白了后缀表达式是 ...

  10. 数据结构:前缀,中缀,后缀表达式(逆波兰表达式)

    前缀表达式(波兰表达式) 前缀表达式的运算符位于操作数之前. 比如 (1+2)*3-4  对应的前缀表达式就是: - * + 1 2 3 4 前缀表达式的计算机求值 从右至左扫描表达式,遇到数字时,就 ...

最新文章

  1. .net里鼠标选中的text数据怎么获取_怎么利用Excel设置当天生日提醒功能
  2. 主机overlay和网络overlay_Docker网络篇之overlay模式
  3. ffmpeg for android shared library
  4. 计算传递函数乘法_软件开发教程:计算机科学最重要的32个算法
  5. 算法选择_快速筛出topK的快速选择算法
  6. 我用3天时间,整理了几十个项目的Python资料
  7. 计算机课题推荐人意见,课题推荐人意见
  8. curl DNS解析失败crash问题
  9. DP转HDMI方案|DP转HDMI自带SPI|AG6311设计电路|AG6311MDQ设计参考原理图
  10. html5 发送邮件,【JS】使用 Emailjs 发送邮件
  11. 程序猿秃顶算工伤吗?
  12. 带财神和白搭胡牌算法
  13. 部署开源LWM2M服务器 leshan
  14. 计算机图形学五:几何-Geometry
  15. IIS Web 服务器的权限设置
  16. 正交矩阵的列向量组是标准正交向量组
  17. 2017inter面食德提姆
  18. 基于GEC6818的简易自动售货机的设计
  19. 辽宁科技学院计算机专业宿舍,辽宁科技学院专科宿舍内部结构如何
  20. Bladex集成quartz

热门文章

  1. UG_NX 12.0的安装步骤过程及问题解决
  2. linux服务器基线配置
  3. 骨架屏原理——面试别再被挨打了
  4. MySQL 实战45讲--笔记
  5. flex布局换行后有缝隙怎么解决
  6. 【QT】splitter实现界面部件的左右滑动
  7. windows安装jdk+tomcat并配置环境
  8. 教育平台线上课程数据分析
  9. 直方图规定化——GML和SML映射规则
  10. (经典题)纸杯电梯的测试用例设计点