每日一题(9)

这里写图片描述

思路:

  1. 判断此字符串是否为数字字符串,如果是,压栈;否则,该串为符号位
  2. 压栈时要将字符串转化为整数存储,在C99里可以用s.push(atoi(tokens[i++].c_str())),在C++11里直接用stoi
  3. 当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;
}

猜你喜欢

转载自blog.csdn.net/sifanchao/article/details/81567404