关于手打栈(Stack)的最基本用法

发布时间 2023-07-07 22:24:58作者: httony

写在前面

这是本蒟蒻的第一篇博客。毕竟不是题解,也没有冠以题解的名号。作者就是个时常不带脑子的傻瓜,因此定有错误、不足之处,还请多多包涵,并欢迎批评指正!

栈(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;
 } 

THE END~