栈————关于出栈序列
首先了解一下栈,栈的基本使用:
栈是一种“后进先出”的数据结构,只能在一端进行插入(压栈)、删除(出栈)的数据操作。
1 Stack的基本使用 2 初始化 3 Stack stack=new Stack 4 判断是否为空 5 stack.empty() 6 取栈顶值(不出栈) 7 stack.peek() 8 进栈(从顶部进) 9 stack.push(Object); 10 出栈(从底部出) 11 stack.pop(); 12 13 实例: 14 public class Test01 { 15 public static void main(String[] args) { 16 Stack stack=new Stack(); 17 //1.empty()栈是否为空 18 System.out.println(stack.empty()); 19 //2.peek()栈顶值 3.进栈push() 20 stack.push(new Integer(1)); 21 stack.push("b"); 22 System.out.println(stack.peek()); 23 //4.pop()出栈 24 stack.pop(); 25 System.out.println(stack.peek()); 26 27 } 28 }
用一个动画效果演示入栈出栈:
入栈序列是1、2、3、4,入完之后只能4先出栈
此时只能4先出栈,321都有东西压在头顶是出不去的。
![](https://img2018.cnblogs.com/blog/1711104/201906/1711104-20190627104632102-209765903.png)
出栈顺序有句绕口令是“后出先入逆序”,理解一下什么是后出先入逆序:
比如序列:3 1 2 4:
- 选择任意元素,这里选择3.
- 比3后出的有三个元素,124
- 比3先入的有两个元素,12
- 12不是逆序的
- 所以这个序列是不合法的出栈序列
4个元素一共有24种排序,其中合法的出栈序列有14种(加黑部分):
解释下为什么可以4不第一个出,1、2、3也可以第一个出栈:
- 以3214为例
- 入栈的顺序可以是:1、2、3
- 这时4还没有入栈 ,而3先出栈了
- 接着2、1出栈了
- 4最后入栈,再出栈