写在前面
这是本蒟蒻的第一篇博客。毕竟不是题解,也没有冠以题解的名号。作者就是个时常不带脑子的傻瓜,因此定有错误、不足之处,还请多多包涵,并欢迎批评指正!
栈
栈(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; }