程序员面试金典_SetOfStacks

原书中描述设想有一堆盘子,堆太高可能会倒下来;在现实生活中,盘子堆到一定高度时重新堆另外一堆盘子。请实现一种数据结构SetOfStacks,模拟这种行为。

为了方便检测,设置多行两列的操作数组op[][];每行第一个数代表操作,若为1,push进栈、第二个数为进栈数据;若为2,pop出栈;size表示每个栈最大容量,超过栈的容量则申请新栈,最后返回所有栈
Java代码参考

import java.util.ArrayList;
import java.util.Stack;

public class _03SetOfStacks {
    public static void main(String[] args) {
        int[][] op = {//模拟进栈1,2,3,4;出栈
                {1, 1},
                {1, 2},
                {1, 3},
                {1, 4},
                {2, 0}
        };
        int size = 2;//每个栈最大容量2
        ArrayList> res = setOfStacks(op, size);
        System.out.println(res.toString());

    }

    private static ArrayList> setOfStacks(int[][] op, int size) {
        ArrayList> ans = new ArrayList<>();
        Stack current = new Stack<>();//当前操作栈
        for(int i = 0; i < op.length; i++) {
            int operate = op[i][0];//操作数1-进栈;2-出栈
            int data = op[i][1];//进栈数据
            if(operate == 1) {//进栈
                if(current.size() == size) {//栈满
                    ans.add(current);
                    current = new Stack();
                }
                current.push(data);
            }else if(operate == 2) {
                if(current.size() <= 0) {
                    current = ans.get(ans.size() - 1);
                    ans.remove(ans.size());
                }else {
                    current.pop();
                }
            }
            if(i == op.length - 1&¤t.size() < size)//最后一个未满栈的添加
                ans.add(current);
        }
        
        return ans;
    }

}

你可能感兴趣的:(程序员面试金典_SetOfStacks)