栈问题-根据入栈序列,得出可能的出栈序列
2012-01-27 19:56
232 查看
根据入栈序列,得出可能的出栈序列
例如:
输入: A B
输出:
A进A出B进B出 AB
A进B进B出A出 BA
输入:A B C
输出:
A进A出B进B出C进C出 ABC
A进A出B进C进C出B出 ACB
A进B进C进C出B出A出 CBA
A进B进B出C进C出A出 BCA
A进B进B出A出C进C出 BAC
具体函数
例如:
输入: A B
输出:
A进A出B进B出 AB
A进B进B出A出 BA
输入:A B C
输出:
A进A出B进B出C进C出 ABC
A进A出B进C进C出B出 ACB
A进B进C进C出B出A出 CBA
A进B进B出C进C出A出 BCA
A进B进B出A出C进C出 BAC
具体函数
public static void printAllPop(List<Object> list) { LinkedList<Object> queue = new LinkedList<Object>(list); LinkedList<Object> stack = new LinkedList<Object>(); List<Object> popList = new ArrayList<Object>(); StringBuilder sb = new StringBuilder(); printAllPop(queue, stack, popList, sb); } private static void printAllPop(LinkedList<Object> queue, LinkedList<Object> stack, List<Object> popList, StringBuilder sb) { // 如果数据源队列为空,则如果数据栈为空说明此系列入栈出栈过程已结束则输出整个过程,反之数据栈不为空则说明数据栈只能进行出栈操作 // 如果数据源队列不为空,则如果数据栈为空则说明数据栈只能做入栈操作,反之数据栈又能做入栈操作也有可能做出栈操作,即过程产生分支 // 为了两个操作互不影响,在这里用复制相关参数的方法保存现场,让一个操作用参数副本,一个操作用原来的参数 if (queue.isEmpty()) { if (stack.isEmpty()) { System.out.println(sb + " " + popList); } else { popList.add(stack.peekLast()); sb.append(stack.pollLast() + "出"); printAllPop(queue, stack, popList, sb); } } else { if (stack.isEmpty()) { stack.add(queue.peekFirst()); sb.append(queue.pollFirst() + "进"); printAllPop(queue, stack, popList, sb); } else { LinkedList<Object> queueCopy = new LinkedList<Object>(queue); LinkedList<Object> stackCopy = new LinkedList<Object>(stack); List<Object> popListCopy = new ArrayList<Object>(popList); StringBuilder sbCopy = new StringBuilder(sb.toString()); stackCopy.add(queueCopy.peekFirst()); sbCopy.append(queueCopy.pollFirst() + "进"); printAllPop(queueCopy, stackCopy, popListCopy, sbCopy); popList.add(stack.peekLast()); sb.append(stack.pollLast() + "出"); printAllPop(queue, stack, popList, sb); } } }
相关文章推荐
- 根据入栈顺序得出所有可能的出栈顺序(c++)
- 所有可能的出栈序列问题及卡塔兰数的应用
- 可能的出栈序列问题
- 根据入栈顺序输出所有可能的出栈顺序 (Java)
- 所有可能的出栈序列问题及卡塔兰数的应用
- 最大子序列问题:给定一整数序列A1,A2,A3...An(可能有负数),求A1~An的一个最大子序列Ai~Aj的和。
- 问题-栈S最多能容纳4个元素,现有6个元素按A、B、C、D、E、F顺序进栈,问可能的出栈顺序。
- 栈 入栈序列与出栈序列 合法性 的一个有趣问题
- 关于一个栈的输入顺序是a,b,c,d,e则下列序列中不可能是出栈顺序
- 已知入栈顺序的n个元素求合理的出栈序列有多少种
- 夺冠概率 足球比赛具有一定程度的偶然性,弱队也有战胜强队的可能。 假设有甲、乙、丙、丁四个球队。根据他们过去比赛的成绩,得出每个队与另一个队对阵时取胜的概率表:
- 面试题精选(61):打印可能的出栈序列
- 根据已知入栈顺序判断一个数组是否是出栈顺序
- HDU-1023 Train Problem II 出栈序列问题
- 出栈序列问题,求卡特兰数
- 通过一上午资料分析得出“裸身”跳楼高二女生可能是精神问题,非他杀
- 卡兰特数列 解决出栈序列统计问题
- 编号为 1 到 n 的 n 个元素,顺序的进入一个栈,则可能的出栈序列有多少种?[摘]
- 面试题之括号匹配分析( 出栈序列是否合法,给定一个入栈序列,求所有可能的出栈序列等等)
- 从1到n的一个序列依次入栈,则一共可能有多少种出栈方式?