栈Stack
- 栈是一种线性结构
- 相比数组,栈对应的操作是数组的子集
- 只能从一端添加元素,也只能从同一端取出元素
- 这一端称为栈顶
- 栈是一种 后进先出 LIFO(Last In First Out)的数据结构
栈的应用
- Undo操作(撤销)- 编辑器
在编辑器中输入“我 爱 学习”,即在栈内添加“我”,“爱”,“学习”三个元素,但输入错误为“我 不爱 学习”了,那么要正确输入,就要执行撤销功能,删除“学习”和“不爱”,即取出“学习”和“不爱”两个元素,然后添加元素“爱 学习”。
- 系统调用栈 - 操作系统
函数A执行到第2行时停止,执行子函数B,此时,在栈中添加一个A2来标记程序执行到此有一个停止;
函数B执行到第2行时停止,执行子函数C,此时,在栈中添加一个B2来标记程序执行到此有一个停止;
函数C执行完后,会查看系统的栈应该执行哪里,此时,在栈中存在A2、B2两个元素;
从栈中取出栈顶元素B2,即程序应该执行函数B的第3行,执行完函数B之后再查看系统栈;
从栈中取出栈顶元素A2,即程序应该执行函数A的第3行,执行完函数A之后再查看系统栈,发现栈是空的,那么此时的程序就执行完了。
- 括号匹配 - 编译器
栈的实现
1 | Stack<E> |
leetcode练习
第20题:Valid Parentheses
链接:https://leetcode-cn.com/problems/valid-parentheses
1 | class Solution { |