zoukankan      html  css  js  c++  java
  • 表达式树

    #include<iostream>
    #include<string.h>
    #include<string>
    #include<stack>
    #include<queue>
    using namespace std;
    /*
    算法:
    遍历字符串s,用另一个字符串ss储存后缀式
    ①若为值,直接加在ss后面
    ②若为'(',入符号栈
    ③若为')',输出之前的元素直到遇到')'
    ④若为运算符,将符号栈符号弹出并加到ss后面
    ⑤遍历完后,将栈中剩余符号加到ss后面
    */
    string trans(string s){
    	stack<char>cal;
    	string ss="";
    	int len=s.length();
    	for(int i=0;i<len;i++){
    		if(s[i]=='(')//若为'(',入符号栈
    			cal.push(s[i]);
    		else if(s[i]=='+'||s[i]=='-'||s[i]=='*'||s[i]=='/'){//若为运算符,将符号栈符号弹出并加到ss后面
    			while(!cal.empty()){
    				char tmp=cal.top();
    				if(tmp=='(')
    					break;
    				cal.pop();
    				ss+=tmp;
    			}
    			cal.push(s[i]);
    		}
    		else if(s[i]==')'){//若为')',输出之前的元素直到遇到')'
    			while(!cal.empty()){
    				char tmp=cal.top();
    				cal.pop();
    				if(tmp=='(')
    					break;
    				ss+=tmp;
    			}
    		}
    		else//若为值,直接加在ss后面
    			ss+=s[i];
    	}
    	// /遍历完后,将栈中剩余符号加到ss后面
    	while(!cal.empty()){
    		char tmp=cal.top();
    		cal.pop();
    		ss+=tmp;
    	}
    	return ss;
    }
    
    int main(){
    	string s="(A+B)*((C-D)*E+F)";
    	cout<<trans(s)<<endl;
    	return 0;
    }
  • 相关阅读:
    学习进度条64
    学习进度条63
    学习进度条62
    学习进度条61
    学习进度条60
    学习进度条59
    学习进度条58
    学习进度条57
    学习进度条56
    学习进度条55
  • 原文地址:https://www.cnblogs.com/aeipyuan/p/12285302.html
Copyright © 2011-2022 走看看