一、题干:acwing模拟栈
二、代码实现
这题第一次写的时候因为写前面的链表写顺手了,直接用函数实现了。
但后面发现实现起来十分简单,不需要写多余的函数。
1.函数版本
#include<iostream>
using namespace std;
const int N = 1e5 + 10;
int n[N],idx;
//初始化
void init()
{
idx = 0;
}
//插入元素x
void push(int x)
{
n[++idx] = x;
}
//删除栈顶元素
void pop()
{
idx --;
if(idx<0)idx = 0;
}
//判断栈是否为空
bool empty()
{
return idx ? false : true ;
}
//返回栈顶元素
int query()
{
return n[idx];
}
int main()
{
init();
int m;
cin>>m;
while(m--)
{
string op;
cin>>op;
int x;
if(op == "push")
{
cin>>x;
push(x);
}
else if(op == "pop")
{
pop();
}
else if(op == "empty")
{
if(empty())cout<<"YES\n";
else cout<<"NO\n";
}
else if(op == "query")
{
cout<<query()<<'\n';
}
}
return 0;
}
2.无函数版本
#include<iostream>
using namespace std;
const int N = 1e5 + 10;
int n[N],idx;
int main()
{
idx = 0;
int m;
cin>>m;
while(m--)
{
string op;
cin>>op;
int x;
if(op == "push")
{
cin>>x;
n[++idx] = x;
}
else if(op == "pop")
{
idx --;
if(idx<0)idx = 0;
}
else if(op == "empty")
{
if(idx ? false : true )cout<<"YES\n";
else cout<<"NO\n";
}
else if(op == "query")
{
cout<<n[idx]<<'\n';
}
}
return 0;
}