码迷,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
迷上了代码!