栈的压入、弹出序列

问题陈述

给定一个入栈序列,可能存在多种出栈序列。然后我们给定一个出栈序列,判断它是否是正确的出栈序列。

思路分析

  • 按入栈序列逐个入栈并判断当前栈顶元素是否和出栈序列元素相等,若相等则出栈该元素,同时出栈序列指向下一个元素。
  • 继续入栈,继续判断。若为合理的出栈序列,最后栈必空。

代码实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public class StackPop_sequence {
public boolean is_StackPop_sequence(int[] in,int[] out){
Stack<Integer> stack=new Stack<>();
int j=0,n=out.length;
for(int i=0;i<in.length;i++){
stack.push(in[i]);
while (!stack.isEmpty()&&j<n&&stack.peek()==out[j]){
stack.pop();
j++;
}
}
return stack.isEmpty();
}
public static void main(String[] args){
int[] in={1,2,3,4,5};
int[] out={5,4,3,2,1};
StackPop_sequence stackPop_sequence=new StackPop_sequence();
System.out.println(stackPop_sequence.is_StackPop_sequence(in,out));
}
}