码迷,mamicode.com
首页 > 其他好文 > 详细

sdut 2484 算术表达式的转换

时间:2018-08-16 00:50:13      阅读:157      评论:0      收藏:0      [点我收藏+]

标签:href   img   src   出栈   0ms   ima   com   time   str   

本题考的主要为对队列的理解与应用

技术分享图片

#include <bits/stdc++.h>

using namespace std;

stack<char>st2,st1;
int main()
{
    int i,len;
    char s[100];
    cin>>s;
    while(!st1.empty())st1.pop();
    while(!st2.empty())st2.pop();
    len=strlen(s);
/*
前缀是从后向前遍历,若为字母则进入一个储存的数组里(这里用了栈st1);
否则,若为‘)’则进栈st2,若为‘(’则将‘)’前面的元素进入st1,
若为其它的运算符时,
如果当前运算符优先级大于等于st2的栈顶元素则进入st2,否则进入st1;
*/ for(i=len-2; i>=0; i--) { if(s[i]<=‘z‘&&s[i]>=‘a‘)st1.push(s[i]); else if(st2.empty())st2.push(s[i]); else if(s[i]==‘*‘||s[i]==‘/‘)st2.push(s[i]);//乘除号大于等于其它运算符 else if(s[i]==‘+‘||s[i]==‘-‘) { if(st2.top()==‘)‘)st2.push(s[i]); else if(st2.top()==‘*‘||st2.top()==‘/‘) { st1.push(st2.top()); st2.pop(); st2.push(s[i]); } else if(st2.top()==‘+‘||st2.top()==‘-‘)st2.push(s[i]); } else if(s[i]==‘)‘)st2.push(s[i]); else if(s[i]==‘(‘) { while(!st2.empty()&&st2.top()!=‘)‘) { st1.push(st2.top()); st2.pop(); } if(!st2.empty()&&st2.top()==‘)‘)st2.pop(); } } while(!st2.empty()) { if(st2.top()!=‘)‘&&st2.top()!=‘(‘) st1.push(st2.top()); st2.pop(); } while(!st1.empty()) { cout<<st1.top(); st1.pop(); } cout<<endl;   /*   中序遍历把括号去掉即可   */ for(i=0; s[i]!=‘#‘; i++) { if(s[i]!=‘(‘&&s[i]!=‘)‘) cout<<s[i]; } cout<<endl;   /*   后续遍历为若是字母则输出,当为运算符或括号时:   若栈st2空或左括号时进栈,当不为空时,   若当前运算符优先级大于栈顶元素就进栈;   否则将栈顶元素出栈,并把当前元素入栈,   最后输出栈内剩余元素   */ while(!st2.empty())st2.pop(); for(i=0; s[i]!=‘#‘; i++) { if(s[i]<=‘z‘&&s[i]>=‘a‘)cout<<s[i]; else if(st2.empty())st2.push(s[i]); else if(s[i]==‘*‘||s[i]==‘/‘) { if(st2.top()==‘*‘||st2.top()==‘/‘) cout<<s[i]; else st2.push(s[i]); } else if(s[i]==‘+‘||s[i]==‘-‘) { if(st2.top()==‘(‘)st2.push(s[i]); else { cout<<st2.top(); st2.pop(); st2.push(s[i]); } } else if(s[i]==‘(‘)st2.push(s[i]); else if(s[i]==‘)‘) { while(!st2.empty()&&st2.top()!=‘(‘) { cout<<st2.top(); st2.pop(); } if(!st2.empty()&&st2.top()==‘(‘)st2.pop(); } } while(!st2.empty()) { cout<<st2.top(); st2.pop(); } cout<<endl; return 0; } /*************************************************** Result: Accepted Take time: 0ms Take Memory: 192KB Submit time: 2018-08-15 ****************************************************/



sdut 2484 算术表达式的转换

标签:href   img   src   出栈   0ms   ima   com   time   str   

原文地址:https://www.cnblogs.com/xqmmd/p/9484142.html

踩
(0)
赞
(0)
   
举报
评论 一句话评论(0)
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!