栈的几个经典应用,真的绝了
创作时间:
作者:
@小白创作中心
栈的几个经典应用,真的绝了
引用
1
来源
1.
https://developer.aliyun.com/article/1588257
栈是一种常见的数据结构,其特点是先进后出。本文将介绍栈的几个经典应用场景,包括如何用栈实现队列以及如何进行括号匹配等对称匹配问题。通过具体的代码示例,帮助读者深入理解栈的应用。
一、我们了解的栈
自从最开始接触栈之后,我们就知道栈是一个先进后出的数据结构,一直到现在也没忘记这个特点。也就是说访问栈里面的元素顺序是从最近插入的开始访问。但是栈的使用场景其实了解的不多,本文就来总结下栈有哪些经典使用场景吧。
二、栈的经典应用
- 栈其实可以用来实现队列。
栈的特点是先进后出,而队列的特点是先进先出。
如果我们使用两个栈,可以实现队列的功能,双栈实现队列。
如上图,我们通过将第一个栈的数据导入第二个栈,再通过第二个栈出栈,实现队列先进先出的特性。
- 栈可以用于对称匹配,如匹配有效的括号,有效的算式表达式。
比如有一串括号字符串,([{}])
,我们需要判断括号是否完全匹配。
通过将一边的括号入栈,遇到了对边的括号,需要出栈匹配。
我们可以发现,}])
和出栈的括号顺序可以匹配,如果括号完全匹配,那么最终栈里面没有一个元素。
三、栈应用实战
leetcode20. 有效的括号
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();
}
}
leetcode232. 用栈实现队列
class MyQueue {
Stack<Integer> stack1 = new Stack<>();
Stack<Integer> stack2 = new Stack<>();
public MyQueue() {
}
public void push(int x) {
stack1.push(x);
}
public int pop() {
if(!stack2.isEmpty()) {
return stack2.pop();
}
while(!stack1.isEmpty()) {
stack2.push(stack1.pop());
}
if(!stack2.isEmpty()) {
return stack2.pop();
}
return 0;
}
public int peek() {
if(!stack2.isEmpty()) {
return stack2.peek();
}
while(!stack1.isEmpty()) {
stack2.push(stack1.pop());
}
if(!stack2.isEmpty()) {
return stack2.peek();
}
return 0;
}
public boolean empty() {
return stack1.isEmpty() && stack2.isEmpty();
}
}
四、总结
栈的特性先进后出理解很简单,但是实际操作是有一定难度的,看完栈的应用,发现栈可以解决的问题还是非常有意思的。
热门推荐
Excel制作带年份数据的图表:从入门到精通
宋朝传统版《百家姓》,第163名,“支姓”的起源和历史,你知道吗?
舌尖上的春天:时令食材与美味食谱全攻略
AI修图用什么电脑好用?从硬件配置到软件选择的全面指南
柳雷鸟的四季羽毛变化及特征描述
肝脏损伤吃什么恢复快
构建你的学术论文:从大纲到 2024-2025 年的最终稿
Cell(IF=45.5) 丨被晒死的细胞?揭示紫外线诱导细胞凋亡的机制
Cell重磅:揭开紫外线导致细胞死亡的作用机制
小酥肉(详细份量版)
如何设计一套上传文件的API
德国工作时间与心理健康:工作与休息的科学
一诗一座城,一词一盛景,哪首写的是你故乡?
道教与佛教:中国宗教文化的两大流派
为何猪八戒要一口吞掉人参果,连嚼都不嚼?只因他知道其中秘密
什么是私域运营?如何从0到1打造高效的私域生态?
什么是基于价值的定价?
Swift二阶段初始化机制详解:原理与安全检查
茶杯泰迪的寿命有多长?如何延长其寿命?
折叠自行车的五种基本设计策略
互换性的定义及其在工业生产中的重要性
盐水虾是冷水下锅还是热水下锅?真相揭秘!
什么是易数?河图洛书、八卦之“数”到底是什么?
胃不舒服时的饮食注意事项
秋季干燥上火喝什么茶比较好
35部适合孩子看的英文电影,豆瓣评分平均8.2分,赶紧收藏起来!
如何减少食物的咸味
肾病患者食用香椿全攻略:营养价值与注意事项
沁园春雪的历史背景与情感解读
食物买回家后应该如何妥善贮存?