22.栈的压入和弹出序列

来源:互联网 发布:空调换热器设计软件 编辑:程序博客网 时间:2024/04/25 15:23

给定两个序列A,B,判断按照A的入栈顺序能否得到B的出栈顺序

思路比较明确,创建一个栈,当栈为空,或者栈顶元素不是B的目前序列元素(这部分可以用数组或者列表保存),那么就按照A的序列顺序压入下一个数,如果是的话就将这个数出栈。如果A的所有元素已经入栈,但是B的元素还有没有入栈的,那么说明不符合。

代码需要注意边界条件:

public class twenty { public static void main(String args[]){ Stack<Integer>s=new Stack<Integer>(); List<Integer>list=new ArrayList<Integer>();//保存A序列 List<Integer>list2=new ArrayList<Integer>();//保存B序列 Scanner cin=new Scanner(System.in); while(true){ int m=cin.nextInt();//以0停止 if (m==0) break; list.add(m); } while(true){ int m=cin.nextInt(); if (m==0) break; list2.add(m); } cin.close(); int i=0;//控制第一个栈压入 int j=0;//控制第二个栈压入 while(i<=list.size()&&j<list.size()){ if (s.isEmpty()||s.peek()!=list2.get(j)){//如果栈为空,或者栈顶元素不是等待元素 int m=list2.get(j); while(i<list.size()&&list.get(i)!=m){ s.push(list.get(i)); i++; } if (i==list.size())//栈顶元素不是等待元素,并且前一个已经遍历结束,说明不符合     break; else i++;//跳过符合的这个元素 }else{//栈顶元素就是等待元素 s.pop(); } j++;//待压入元素往后面去一个 } if (i==list.size()&&j==list.size()) System.out.println("符合"); else System.out.println("不符合");}}


0 0
原创粉丝点击