栈的几个经典应用,真的绝了
创作时间:
作者:
@小白创作中心
栈的几个经典应用,真的绝了
引用
1
来源
1.
https://developer.aliyun.com/article/1588257
栈是一种常见的数据结构,其特点是先进后出。本文将介绍栈的几个经典应用场景,包括如何用栈实现队列以及对称匹配等,通过具体的代码示例帮助读者深入理解栈的应用。
一、我们了解的栈
自从最开始接触栈之后,我们就知道栈是一个先进后出的数据结构,一直到现在也没忘记这个特点。也就是说访问栈里面的元素顺序是从最近插入的开始访问。但是栈的使用场景其实了解的不多,本文就来总结下栈有哪些经典使用场景吧。
二、栈的经典应用
1、栈其实可以用来实现队列。
栈的特点是先进后出,而队列的特点是先进先出。
如果我们使用两个栈,可以实现队列的功能,双栈实现队列。
如上图,我们通过将第一个栈的数据导入第二个栈,再通过第二个栈出栈,实现队列先进先出的特性。
2、栈可以用于对称匹配,如匹配有效的括号,有效的算式表达式。
比如有一串括号字符串,([{}]),我们需要判断括号是否完全匹配。
通过将一边的括号入栈,遇到了对边的括号,需要出栈匹配。
我们可以发现,}])和出栈的括号顺序可以匹配,如果括号完全匹配,那么最终栈里面没有一个元素。
三、栈应用实战
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();
}
}
四、总结
栈的特性先进后出理解很简单,但是实际操作是有一定难度的,看完栈的应用,发现栈可以解决的问题还是非常有意思的。
热门推荐
《三国演义》深度揭秘:周瑜葬礼上,诸葛亮为何能“险中求生”?
白萝卜里面发黑能吃吗
海外华文学校校长及教师共话华文教育当下与未来——让华裔青少年更好感受中华文化
叶子项链的多重寓意:自然之美与生命之力的象征
松树叶子的形状、特点与生态功能(探秘松树叶子的形态学)
澳超中央海岸水手VS墨尔本城前瞻:墨尔本城是今季澳职作客龙
挂靠公司交养老保险的优势是什么?
椰子究竟属于哪一类植物?
转借银行贷款,为何利息全无?
商标注册第5类都包括哪些商品或服务?
商标注册中的第10类包括哪些商品和服务?
草莓常见病害的防治药剂介绍
农历六月十五,恭贺道教第一护法神王灵官圣诞!持诵宝诰获福无量!
全真派北五祖都有谁,北五祖宝诰解析
劳务公司资质怎么办理
邓稼先的家风故事:为国奉献 简朴生活
高密度胆固醇和低密度胆固醇区别是什么
鸡蛋果的成熟期和采摘时间(掌握成熟期采摘时机不错过)
DNS网络安全防护指南:十大关键措施详解
杭州地铁四期规划获批在即,临平将新增4条地铁线路
怎么缓解中暑头痛
高效沟通的双向桥梁对团队合作有何作用?
苹果COO走访富士康、领益智造工厂:没有中国供应商,就没有苹果的成功
鼻窦炎涕中带血怎么办?原因分析与处理建议
云手机技术架构原理浅析:ARM架构与X86架构的对比
向新而行 以质致远丨开辟新赛道,蜀道集团布局氢能全产业链
医保支付方式改革目的何在?国家医保局:提高基金平稳运行可预期性
大树将军冯异怎么帮助刘秀南征北战打天下的?
我国多地连续暴雨,蚯蚓尸体随处可见!种群数量会降低吗?
卖错了?能解决曼联目前中场困局的,是去年刚走的麦克托米奈