在一本算法书看到了栈,然后自己照着书打发现结果是出不来的
例题 逆波兰运算式
栈是先进后出的;
其实我第一步是考虑怎么读数据,(自己的理解){首先它就是把 1 ,3输入,top指针应该是指向3,然后取出,top–,top指针指向1}
赋值的代码
int ans=0;
int j;
for(j=i;j<str.size();j++)
{
if(str[j]==' ') break;
ans=ans*10+str[j]-'0';
}
i = j;//回到空格的位置
s.push(ans);
//cout<<ans<<" ";
然后就是循环遍历 如果有空格就跳;如果是小数就double了,然后加一个条件istr[i]==’ .’;
然后是ac代码了
#include<iostream>
#include<stack>
#include<cstdio>
#include<stdlib.h>
using namespace std;
stack<int>s;
string str;
int a,b;
int main(){
getline(cin,str);
for(int i = 0;i < str.size();i++)
{
if(str[i]==' ')continue;
else if(str[i]=='+'){
a=s.top();
s.pop();
b=s.top();
s.pop();
s.push(a+b);
}
else if(str[i]=='-'){
a=s.top();
s.pop();
b=s.top();
s.pop();
s.push(b-a);
}
else if(str[i]=='*'){
a=s.top();
s.pop();
b=s.top();
s.pop();
s.push(a*b);
}
else{
int ans=0;
int j;
for(j=i;j<str.size();j++)
{
if(str[j]==' ') break;
ans=ans*10+str[j]-'0';
}
i = j;//回到空格的位置
s.push(ans);
//cout<<ans<<" ";
}
}
printf("%d",s.top());
return 0;
}
小白个人笔记;