写在前面
这是本蒟蒻的第一篇博客。毕竟不是题解,也没有冠以题解的名号。作者就是个时常不带脑子的傻瓜,因此定有错误、不足之处,还请多多包涵,并欢迎批评指正!
栈
栈(stack
)是一种数据结构,在STL标准库中可以直接使用。具体地说,栈就是一种只允许在一端进行插入或删除操作的线性表。与队列作区分,栈类似于“桶”的概念,即其从一端插入数据,从同一端删除或冒出,数据呈先进后出。
push
是栈的基本操作之一,即“压栈”,也就是将新元素插入栈的过程。
pop
也是一种基本操作,即“退栈”,将栈顶元素删除。
top
则是给出栈顶元素。
说明结束,进入正题
我们用数组实现栈的功能:
const int MAXN=105;//因为是演示,范围可以小一点
int stack[MAXN],prt=0; //ptr表示栈长度
push
:
void push(int x)
{
if(prt>=MAXN)//长度达到MAXN代表栈溢出
{
cout<<"Stack overflow!";//输出告警信号
return;
}
stack[prt]=x;//把相关变量赋值给栈的最后一位
prt++;//代表长度又增加一位
}
pop
:
void pop()
{
if(prt==0)//检测是否空栈
{
cout<<"The stack is empty!"; //空栈告警
return;
}
prt--;//直接将长度自减即可。由于有prt控制,原栈顶元素对程序无影响
}
top
:
int top()
{
if(prt==0)//检测是否空栈
{
cout<<"The stack is empty!"; //空栈告警
return;
}
return a[prt-1];//返回栈顶元素
}
需要注意:
-
在判断栈溢出时,应注意加上等号,因为长度等于上限即无法压栈;
-
而判断栈空时,用等号即可。
-
由于prt表示长度,因此在输出top时要减1。
最终代码
#include<bits/stdc++.h>
using namespace std;
const int MAXN=105;
int stack[MAXN],prt=0;
void push(int x)
{
if(prt>=MAXN)
{
cout<<"Stack overflow!";
return;
}
stack[prt]=x;
prt++;
}
void pop()
{
if(prt==0)
{
cout<<"The stack is empty!";
return;
}
prt--;
}
int top()
{
if(prt==0)
{
cout<<"The stack is empty!";
return;
}
return a[prt];
}
int main()
{
//进行需要的操作
return 0;
}