1.最致命的原因,99%的测评网站,竞赛系统不会对C++代码使用O2优化,导致使用STL的速度慢,容易造成TLE(超时)。
2.学习栈的操作流程和内部原理。
3.虽然咱们可以使用以下代码手动开启O2优化, 但是在竞赛中有被举报和取消成绩的风险。
#pragma GCC optimize(2)创建数组栈
需要一个数组stk[N],一个指针tt指向栈顶。
我们stk[0]不存放数据,可以将栈数组初始化。
int stk[N],tt = 0;把数据x压入栈
void stkpush(int x)
{
stk[++tt] = x;//++tt可保证从stk[1]开始压入数据并且tt指向栈顶
}
把栈顶数据弹出栈
void stkpop()
{
tt--;//最后一个数据没有被销毁,但是已经“失效了”,下次压入栈会把失效数据覆盖
}
读取栈顶元素
int stktop()
{
return stk[tt];//具体类型根据栈的数据类型确定
}
判断栈为空
bool stkempty()
{
return tt == 0;
}
虽然这些操作都比较简单,但是单独写个函数来操作还是比较方便使用的,下面是完整示例代码。
#include#include using namespace std; const int N = 1000010; int stk[N],tt = 0; void stkpush(int x) { stk[++tt] = x; } void stkpop() { tt--; } int stktop() { return stk[tt]; } bool stkempty() { return tt == 0; } int main() { char op;//表示操作数 while(scanf("%c",&op)) { if(op=='S')//停止操作,退出 break; if(op=='P')//压入x元素 { int x; scanf("%d",&x); stkpush(x); } if(op=='D')//弹出栈顶元素 { if(!stkempty())stkpop();//若非空则弹出 else printf("Empty!n"); } if(op=='T')//查询栈顶元素 { if(!stkempty())printf("%dn",stktop()); else printf("Empty!n"); } } return 0; }



