栈的应用

来源:互联网 发布:python逻辑运算符 编辑:程序博客网 时间:2024/06/05 15:45
/*Description检查输入字符串中的括号是否匹配。括号包括:{, }, (, ), [, ]. Input:         第一行是一整数,即测试样例个数n.          以下n行,每一行是一个长度不超过100个字符的字符串。 Output:         第一行是一整数,即测试样例个数n.         以下n行,每一行是一个长度不超过100的字符串。Sample Input:                 3                 a                 2-[(1+2)*2]                 (a+b])Sample Output:                Yes                Yes                No*/#include<iostream>#include<stack>#include<string>using namespace std;int main(){    int n;      cin>>n;   for(int i=0;i<n;i++)   {          stack<char> my;        string s;        int flag=0;        cin>>s;        int len=s.length();        for(int j=0;j<len;j++)        {            if(s[j]=='('||s[j]=='['||s[j]=='{')                my.push(s[j]);            if(s[j]==')')            {                if(my.empty()||my.top()!='(')             {                    flag=1;                    cout<<"No"<<endl;                     break;                      }                 else                 my.pop();            }              if(s[j]==']')            {            if(my.empty()||my.top()!='[')             {                     flag=1;                     cout<<"No"<<endl;                      break;                      }                else                   my.pop();            }              if(s[j]=='}')            {                 if(my.empty()||my.top()!='{')             {                     flag=1;                     cout<<"No"<<endl; //只有右括号或者括号不匹配                      break;                      }                 else                     my.pop();            }         }      if(!my.empty()&&flag==0)//针对"只有左括号"的时候            cout<<"No"<<endl;          if(my.empty()&&flag==0) //针对"没有任何括号的时候"并且falg==0保证了不多输出"No"              cout<<"Yes"<<endl;    } }                                 

2.后缀表达式算

/*后缀表达式计算 

Input     第一行是一整数,即测试样例个数T.     以下T行,每一行是一个长度不超过100的字符串,代表一条后缀表达式。     表达式中只含有+、-、*、/四种运算符和26个小写英文字母,不含其它字符。每一个英文字母代表一个正整数:     a = 1,b = 2,c = 3...y = 25,z = 26。Output    每一个输入样例,单独一行输出结果:后缀表达式的值,一个正实数S,保留两位小数。 Sample Input:                2               ab+c*               int**py++Sample Output:              9.00              2561.00*/#include<iostream>#include<stack>#include<string>#include <iomanip>using namespace std;int main(){int n;cin>>n;for(int i=0;i<n;i++){stack<double> my;double p,q;string s;cin>>s;int len=s.length();for(int j=0;j<len;j++){if(s[j]>='a'&&s[j]<='z')my.push((s[j]-'a'+1));if(s[j]=='+'){p=my.top();my.pop();q=my.top();my.pop();my.push((p+q)); }if(s[j]=='-'){p=my.top();my.pop();q=my.top();my.pop();my.push((q-p)); }if(s[j]=='*'){p=my.top();my.pop();q=my.top();my.pop();my.push((p*q)); }if(s[j]=='/'){p=my.top();my.pop();q=my.top();my.pop();my.push((q/p)); }}cout<<fixed<<setprecision(2)<<my.top()<<endl;}}





0 0
原创粉丝点击