使用数组模拟栈
在结构体中定义存储栈中数据的数组
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;
}