栈及模板

栈及模板

1.栈的定义

img

    栈可以理解为是操作受限的线性表。栈满足后进先出或先进后出的特性。
    在这里,我们采用数组来模拟栈。

2.数组模拟栈

    我们可以用数组stk来模拟栈本身,tt代表栈顶的下标。
    栈具有如下操作:(注意:不同人实现栈的方法是不同的,但是思想都是相同的。我们用本文中的方法来实现栈)
        1.  往栈中插入一个元素
            stk[++tt] = x;
        2.  往栈中弹出一个元素
            tt--;
        3.  判断栈是否为空
        if (tt > 0) not empty
        else empty
        4.  栈顶
        stk[tt];
        5.  栈的初始化
        tt = 0;

3. 栈模板

// tt表示栈顶
int stk[N], tt = 0;

// 向栈顶插入一个数
stk[ ++ tt] = x;

// 从栈顶弹出一个数
tt -- ;

// 栈顶的值
stk[tt];

// 判断栈是否为空,如果 tt > 0,则表示不为空
if (tt > 0)
{

}

4.例题

https://www.acwing.com/problem/content/830/
#include <iostream>
#include <cstdio>

using namespace std;

int stk[100010];
int tt = 0;

void push(int x){
    stk[++tt] = x; 
}
void pop(){
    tt--;
}
int query(){
    return stk[tt];
}
void isEmpty(){
    if(tt > 0){
        printf("NO\n");
    }else{
        printf("YES\n");
    }
}

int main(){
    int m,x;
    scanf("%d",&m);
    string op;
    while(m--){
        cin >> op;
        if(op == "push"){
            scanf("%d",&x);
            push(x);
        }else if(op == "pop"){
            pop();
        }else if(op == "query"){
            printf("%d\n",query());
        }else{
            isEmpty();
        }
    }
    
    return 0;
}
    作者:gao79138
    链接:https://www.acwing.com/
    来源:本博客中的截图、代码模板及题目地址均来自于Acwing。其余内容均为作者原创。
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
posted @   夏目^_^  阅读(15)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示