博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
逆波兰表达式
阅读量:6039 次
发布时间:2019-06-20

本文共 2686 字,大约阅读时间需要 8 分钟。

#include
#include
using namespace std; template
class Stack{ //自定义堆栈公式化描述 public: Stack(){Top=0;} T top(){return a[Top];} void pop(){Top--;} bool isempty(){ if(Top==0)return true; else return false;} void push(T b) { Top++; a[Top]=b;} private: T a[100];int Top; }; void chpost(char inorder[],char post[],int& m)//将中缀表达式转换为后缀表达式,参数m跟踪后缀表达式长度 { int n=strlen(inorder);//获取中缀表达式的长度 Stack
czf;//定义一个char型堆栈用于存放操作符; for(int i=0;i
='0'&&inorder[i]<='9')//若为操作数,直接添加到后缀表达式数组中 { post[m]=inorder[i]; m++; } if(inorder[i]=='(')czf.push(inorder[i]);//若为‘(’直接压入堆栈 if(inorder[i]=='+')//若为‘+’与栈顶比较优先级,较低则将栈顶操作符加到数组中,在将‘+’压栈 { if(!czf.isempty()&&(czf.top()=='*'||czf.top()=='/'||czf.top()=='-')) { post[m++]=czf.top();czf.pop();czf.push(inorder[i]);} else{czf.push(inorder[i]);} } if(inorder[i]=='-')//若为‘-’与栈顶比较优先级,较低则将栈顶操作符加到数组中,将‘-’压栈 { if(!czf.isempty()&&(czf.top()=='*'||czf.top()=='/')) { post[m++]=czf.top();czf.pop();czf.push(inorder[i]); }else{czf.push(inorder[i]);} } if(inorder[i]=='*'||inorder[i]=='/')czf.push(inorder[i]);//若为‘*’或‘/’直接压栈 if(inorder[i]==')')//若遇到‘)’将栈中的操作符依次弹出直到遇到‘(’结束 { while(czf.top()!='(') {post[m++]=czf.top();czf.pop();} czf.pop();//弹出‘(’ } } while(!czf.isempty())//将栈中剩余元素依次弹出到后缀表达式数组中 {post[m++]=czf.top();czf.pop();} }int yusuan(char post[],int n)//通过后缀表达式求值{ Stack
ss;//定义int型堆栈存放操作数及每次运算结果 int a,b,c,result; for(int i=0;i
='0'&&post[i]<='9') { ss.push((post[i]-'0'));//将char型转为int型 } if(post[i]=='-') { b=ss.top();ss.pop();a=ss.top();ss.pop(); c=a-b;ss.push(c); } if(post[i]=='+') { b=ss.top();ss.pop();a=ss.top();ss.pop(); c=a+b;ss.push(c); } if(post[i]=='*') { b=ss.top();ss.pop();a=ss.top();ss.pop(); c=a*b;ss.push(c); } if(post[i]=='/') { b=ss.top();ss.pop();a=ss.top();ss.pop(); c=a/b;ss.push(c); } } result=ss.top();//得到最后栈顶元素 ss.pop();//清空栈 return result;}int main(void) { char in[100];char a;int i=0; cout<<"请输入中缀表达式(#表示结束):"; while(cin>>a)//循环获取输入直到遇到‘#’结束 { if(a=='#')break; in[i++]=a; } char po[100];int n=0; chpost(in,po,n); cout<<"后缀表达式为:"; for(int j=0;j
<
<<""; cout<

  

转载于:https://www.cnblogs.com/vactor/p/4498064.html

你可能感兴趣的文章
php 未实例化类调用方法的问题
查看>>
我对读计算机软件专业硕士的几点看法
查看>>
用JS写CSS
查看>>
TOJ4537: n阶行列式
查看>>
3.16
查看>>
表单文件上传与文件下载
查看>>
下午考
查看>>
创建字符设备的三种方法
查看>>
走在网页游戏开发的路上(六)
查看>>
nginx 配置的server_name参数(转)
查看>>
Uva592 Island of Logic
查看>>
C++基础代码--20余种数据结构和算法的实现
查看>>
footer固定在页面底部的实现方法总结
查看>>
nginx上传文件大小
查看>>
数字通信原理笔记(一)---概述
查看>>
HDU 2243 考研路茫茫——单词情结(自动机)
查看>>
Dubbo OPS工具——dubbo-admin & dubbo-monitor
查看>>
Dungeon Master ZOJ 1940【优先队列+广搜】
查看>>
Delphi 中的 XMLDocument 类详解(5) - 获取元素内容
查看>>
2013年7月12日“修复 Migration 测试发现的 Bug”
查看>>