一、什么是栈
栈是一种线性结构,相对于数组,栈对应的操作是数组的子集,只能从一端添加元素,也只能从一端取出元素 ,这一端成为栈顶。栈是一种后进先出的数据结构(Last In First Out–LIFO),在计算机的世界里,栈拥有着不可思议的作用。
二、栈的应用
2.1 在word或者其他编辑器中,当我们输入一些文本内容的时候,就用到了栈。(举例:”沉迷学习无法自拔”)
在这个栈中,沉迷,学习,无法,自拔这些词依次入栈,但是当我们发现 “无法”误写为“不法”时候,这时我们会执行撤销操作,自拔会先出栈,然后不法也会出栈,最后重新写入"无法"和“自拔”,也就是他们会依次入栈。
2.2 用这样的一个系统栈来记录调用过程中中断的那个调用的点 (即解释了子过程子逻辑的调用我编译器内部运行实现的机理)
当先执行函数A的第二行的时候会执行函数B,而暂时中断函数A的执行,此时在系统栈中会记录一个信息(A 2),即之前的程序执行到A这个函数的第二行了,在这里进行了中断,现在开始执行B这个函数了。同理,执行函数B的第二行的时候会执行函数C,同样在系统栈中会记录一个信息(B2),即执行B函数的第二行时中断了。当执行完C函数的时候, 此时看一下系统栈,位于栈顶的元素是B2,根据“栈顶的元素先出的原则”,计算机就会明白,刚才执行到B2了,这时就会从B函数第三行开始依次执行B函数(B2出栈了),然后再返回到A函数直至执行完(A2出栈)。当A2出栈后,再看一下系统栈,发现系统栈是空的,说明系统栈已经没有之前中断执行到一半这样的调用过程了,即整个过程已经执行完了。
2.3 括号匹配 题目
给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效。有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
注意空字符串可被认为是有效字符串。
示例 1:
输入: “()”
输出: true
示例 2:
输入: “()[]{}”
输出: true
示例 3:
输入: “(]”
输出: false
示例 4:
输入: “([)]”
输出: false
示例 5:
输入: “{[]}”
输出: true
package Solution;
import java.util.Stack;
//括号匹配
public class ParenthesisMatching {
public boolean isValid(String s) {
Stack<Character> stack = new Stack<>();
for (int i = 0; i < s.length(); i++) {
char c = s.charAt(i);