您的位置:首页 > 其它

每天一个算法之判断栈的压入弹出序列

2016-11-04 10:20 274 查看
import java.util.Stack;

public class stackOrder {
public static void main(String args[]){
int[] a1={1,2,3,4,5};
int[] a2={4,3,5,1,2};
System.out.println(istrue(a1,a2));
}
public static boolean istrue(int arr1[],int arr2[]){
Stack<Integer> st=new Stack<Integer>();
int i=0,j=0;
boolean f=false;
//当第二个数组下标到结尾时结束
while(j<=arr1.length-1){
//当栈是空的,或者栈顶元素不等于第二个数组的第一个元素时,往栈里面不断的添加元素
while(st.isEmpty()||st.peek()!=arr2[j]){
//当第一个数组元素读取到尾部时退出
if(i==arr1.length)break;
st.push(arr1[i]);
i++;
}
//如果栈顶元素不等于第一个元素,跳出循环,这个时候属于第一个数组已经全部压进过栈中了,但是栈顶元素与第二个数组元素不等。
if(st.peek()!=arr2[j])break;
//否则就将栈顶弹出,j增大。
j++;
st.pop();
}
//栈空说明全部匹配并弹出
if(st.isEmpty())f=true;
return f;
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐