使用数组模拟栈

在结构体中定义存储栈中数据的数组s、栈顶指针cnt(指向的是数组中存有元素的下一个位置)、初始化函数init()

push函数:将输入数字存入栈顶指针指向的位置(即s[cnt]位置),栈顶指针加一

top函数:直接返回栈顶指针元素(即s[cnt - 1]

pop函数:调用top函数获取栈顶并临时存储用于返回,之后将栈顶指针减一

isEmpty函数:直接返回栈顶指针是否等于0的表达式即可

#include<iostream>
using namespace std;
struct stack
{
    int s[100001]; // 存储栈中数据的数组
    int cnt; // 栈顶指针
    void init() // 初始化函数
    {
        cnt = 0; // 初始时栈为空,将栈顶指针初始化为0
    }
};

void push(stack& sk, int num) // 模拟压入数据
{
    sk.s[sk.cnt] = num;
    sk.cnt++;
}

int top(stack& sk) // 模拟获取栈顶元素
{
    return sk.s[sk.cnt - 1];
}

int pop(stack& sk) // 模拟弹出栈顶数据
{
    int tNum = top(sk);
    sk.cnt--;
    return tNum;
}

bool isEmpty(stack& sk) // 判断栈是否为空
{
    return sk.cnt == 0; // 若栈顶指针为0则表示无元素即栈空,反之栈不空
}

int main()
{
    int n;
    cin>>n;
    stack sk; // 定义栈对象
    sk.init(); // 初始化栈
    for(int i = 0; i < n; i++)
    {
        string op;
        cin>>op;
        if(op == "push")
        {
            int num;
            cin>>num;
            push(sk, num);
        }
        else if(isEmpty(sk)) // pop和top操作前先判断栈是否为空
        {
            cout<<"error"<<endl;
        }
        else if(op == "pop")
        {
            cout<<pop(sk)<<endl;
        }
        else if(op == "top")
        {
            cout<<top(sk)<<endl;
        }
    }
    return 0;
}