1、什么是栈
栈也是一种线性结构,
相比数组,栈对应的操作是数组的子集
只能从一端添加元素,也只能从一端取出元素
这一端称为栈顶
栈是一种后进先出的数据结构。
2、栈的应用
1) 编辑器无处不在的Undo操作(撤销)
2) 程序调用的系统栈
函数A中调用函数B,函数B中调用函数C。
如果C函数执行完了,从栈中查看是B2,接着执行B2的下面1行代码。
如果B函数执行完了,总栈中查看是A2,接着执行A2的下面1行代码。
3) 括号匹配 编译器
3、自定义栈
定义接口
1 2 3 4 5 6 7 | public interface Stack<E> { int getSize(); boolean isEmpty(); void push(E e); E pop(); E peek(); } |
定义自定义栈。基于前面创建的动态数组CustomArray自定义数组(动态数组)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 | public class ArrayStack<E> implements Stack<E> { CustomArray<E> array; public ArrayStack( int capacity){ array = new CustomArray<E>(capacity); } public ArrayStack(){ array = new CustomArray<E>(); } public int getSize() { return array.getSize(); } public boolean isEmpty() { return array.isEmpty(); } public int getCapacity(){ return array.getCapacity(); } public void push(E e) { array.addLast(e); } public E pop() { return array.removeLast(); } public E peek() { return array.getLast(); } @Override public String toString() { StringBuilder res = new StringBuilder(); res.append( "Stack: " ); res.append( "[" ); for ( int i = 0 ; i < array.getSize(); i++){ res.append(array.get(i)); if (i != array.getSize() - 1 ){ res.append( ", " ); } } res.append( "]" ); return res.toString(); } } |
4、编译器 括号匹配
问题描述:给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/valid-parentheses
解决方法: 如下代码所示
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | public class Solution { public boolean isValid(String s){ Stack<Character> stack = new Stack<Character>() ; for ( int i = 0 ; i < s.length() ; i++){ char c = s.charAt(i); if (c == '(' || c == '[' || c == '{' ){ stack.push(c); } else { if (stack.isEmpty()){ return false ; } char topChar = stack.pop(); if ( c == ')' && topChar != '(' ){ return false ; } if ( c == ']' && topChar != '[' ){ return false ; } if ( c == '}' && topChar != '{' ){ return false ; } } } return stack.isEmpty(); } } |
作者:Work Hard Work Smart
出处:http://www.cnblogs.com/linlf03/
欢迎任何形式的转载,未经作者同意,请保留此段声明!
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步