出栈序列的合法性判断【数据结构习题】

出栈序列的合法性判断,数据结构陈越习题

如果是为了解决陈老师的课后习题,思路看课本上就行,这里我用java实现代码,容易看懂

和课本上的输入输出示范不同,我这里做了很多的输入输出标记,程序在运行的时候很容易看出应该输入什么,便于你理解

public class Judge {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        Stack<Integer> stack = new Stack<Integer>();
        System.out.print("按顺序入栈的元素个数N");
        int n = scanner.nextInt();
//        需要校验的出栈序列的个数
        System.out.print("需要校验的出栈序列的个数");
        int k = scanner.nextInt();
//        创建一个数组用来存储待校验的序列
        int[] list = new int[n];
        int count = 1;
        while ( count <= k){

            System.out.println("第"+count+"校验的序列");
//            将该序列存入一个数组中
            for (int i = 0; i < list.length ; i++) {
                System.out.print("第" +(i+1)+ "个数");
                list[i] = scanner.nextInt();
            }

//            开始校验
            for (int i = 0,j = 0; i < n; i++) {
                stack.push(i + 1);
                while (stack.peek() == list[j]) {
                    j++;
                    stack.pop();
                    if (stack.empty()){
                        break;
                    }

                }
            }


            if (stack.empty()){
                System.out.println("该出栈序列合法");
            }
            else System.out.println("该出栈序列不合法");


                count++;
        }

    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值