栈的几个经典应用,真的绝了

一、我们了解的栈

自从最开始接触栈之后,我就知道了栈是一个先进后出数据结构,一直到现在也没忘记这个特点。也就是说访问栈里面的元素顺序是从最近插入的开始访问。但是栈的使用场景其实了解的不多,本文就来总结下栈有哪些经典使用场景吧。

二、栈的经典应用

1、栈其实可以用来实现队列

栈的特点是先进后出,而队列的特点是先进先出

如果我们使用两个栈,可以实现队列的功能,双栈实现队列。

如上图,我们通过将第一个栈的数据导入第二个栈,再通过第二个栈出栈,实现队列先进先出的特性。

2、栈可以用于对称匹配,如匹配有效的括号有效的算式表达式

比如有一串括号字符串,([{}]),我们需要判断括号是否完全匹配。

通过将一边的括号入栈,遇到了对边的括号,需要出栈匹配。

我们可以发现,}])和出栈的括号顺序可以匹配,如果括号完全匹配,那么最终栈里面没有一个元素。

三、栈应用实战

leetcode20. 有效的括号

java 复制代码
class Solution {
    public boolean isValid(String s) {
        int n = s.length();
        //存储关系
        Map<Character, Character> map = new HashMap<Character, Character>() {{
            put(')', '(');
            put(']', '[');
            put('}', '{');
        }};
        Stack<Character> stack = new Stack<Character>();
        for (int i = 0; i < n; i++) {
            char ch = s.charAt(i);
            //是右边的括号
            if (map.containsKey(ch)) {
                //栈顶没有匹配的左边括号
                if (stack.isEmpty() || stack.peek() != map.get(ch)) {
                    return false;
                }
                stack.pop();
            } else {
                //左边的括号,入栈
                stack.push(ch);
            }
        }
        //栈里如果还要括号,则不匹配
        return stack.isEmpty();
    }
}

四、总结

栈的特性先进后出理解很简单,但是实际操作是有一定难度的,看完栈的应用,发现栈可以解决的问题还是非常有意思的。

相关推荐
Geek-Chow15 分钟前
CountDownLatch in Java
java
漂流瓶jz25 分钟前
UVA-1442 洞穴 题解答案代码 算法竞赛入门经典第二版
c++·算法·题解·aoapc·算法竞赛入门经典·uva
LucianaiB40 分钟前
我用豆包工作 Seed-2.1-pro,复刻了 QQ 时代爆红的魔术图片
后端
码事漫谈1 小时前
智谱 ZCode 静默上传 Git 历史:48 小时信任危机复盘
后端
SL_staff1 小时前
从RBAC到场景化授权:《无忧·企业文档》三级权限模型的技术实践解析
java·开源·产品
掘金码甲哥1 小时前
当对话模型遇上向量模型,vllm production stack 又该如何应对?
后端
传奇开心果编程1 小时前
【springboot基础语法学与练】第 1 课:从零开始
java·spring boot·后端·学习
SL_staff2 小时前
财务系统慎用低代码?从数据模型闭环看合规落地的技术实践
java·低代码·全栈
叠层归一研究院2 小时前
基于极限自指的叠层归一宇宙结构理论——无元外部封闭系统的内生区分模型
人工智能·经验分享·算法·agi
IT_陈寒2 小时前
Java线程池用错参数,我的服务居然悄悄崩溃了
前端·人工智能·后端