思路:
- 判断此字符串是否为数字字符串,如果是,压栈;否则,该串为符号位
- 压栈时要将字符串转化为整数存储,在C99里可以用
s.push(atoi(tokens[i++].c_str()))
,在C++11里直接用stoi
- 当tokens[i]为符号位时,出栈拿数据计算。此时需要分两种情况,如果栈中只有一个元素,那么直接返回该元素;否则,进行计算
left_num + sym + right_num
代码详解:
https://blog.csdn.net/sifanchao/article/details/81564014
#include <iostream>
using namespace std;
class Stack
{
public:
Stack(int size)
{
elements = new int[size];
_top = -1;//始终指向栈顶,top=0,就表示有一个数据了
}
~Stack()
{
delete[]elements;
elements = NULL;
}
bool push(int data)//压入元素
{
elements[++_top] = data;//从栈顶压入元素
return true;
}
void top()
{
if (_top == -1)//栈空
cout << "E" << endl;
else
cout << elements[_top] << endl;//返回当前栈顶元素
}
void pop()
{
if (_top > -1)
_top--;
}
private:
int *elements;
int _top;
};
int main()
{
int n = 0;
while (cin >> n && n>0 && n <= 10000){
cin.get();
Stack s(10000);
char ch = '0';
int num = 0;
for (int i = 0; i<n; ++i){
cin >> ch;
switch (ch){
case'P':
cin >> num;
s.push(num);
break;
case'O':
s.pop();
break;
case'A':
s.top();
break;
default:
break;
}
}
cout << endl;
}
system("pause");
return 0;
}