栈的应用——火车出站(java版)

题目描述:某城市有一个火车站,铁轨铺设如图所示。有n节车厢从A方向驶入车站,按进站顺序编号1~n。现让这些火车按照某种特定的顺序进入B方向的铁轨并驶出车站。为了重组车厢,可以借助中转站C。C是一个可以停放任意多节车厢的车站,但由于末端封顶,驶入C的车厢必须按照相反的顺序驶出C。对于每个车厢,一旦从A移入C,就不能再回到A了;一旦从C移入B,就不能回到C了。换句话说,在任意时刻,只有两种选择:A→C和C→B。请编程判断判断:按给定的出站顺序,火车能否出站

package collection;

import java.util.*;
/*
题目复述:对于从a口,按照123456...顺序进入的火车,能否按照给定的顺序从b中驶出;其中c是充当一个中转站,原则是先进后出
 */

public class shed {
    public static void main(String[] args) {
        ArrayList<Integer> list = new ArrayList<>();
        List l = Arrays.asList(3,2,1,4,5);
        list.addAll(l);
        System.out.println(train(5,list));
    }
    public static boolean train(int n, ArrayList<Integer> enter){
        /*
        输入:n 火车节数;enter:给定的出站序列
        输出:火车能否以给定的出站序列出站
         */
        boolean result = true;
        int a = 1;int b = 0;
        Stack <Integer> c = new Stack<>();//初始化一个栈,相当于题目中的c
        while (b<n){
            if (a == enter.get(b)){//a方向的列车直接与目标一致
                a+=1;//跳过c 直接进行
                b+=1;}
            else if (c.empty()==false && enter.get(b)==c.peek()){//c中列车序号是目标序号
                b+=1;//出栈的时候 是此时的b 与栈顶元素相匹配  因此是b的指针在动
                c.pop();
            }
            else if (a<=n){//都不满足 a中列车进入c中
                c.push(a);
                a+=1;//压栈的时候 是a在进入c 因此是a的指针在动
            }
            else{//以上条件均不符合   说明无法按照目标序列排序
                result = false;
                break;
            }
        }
        return result;
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Nnlee.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值