22.栈的压入和弹出序列

给定两个序列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("不符合");
}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值