栈与队列问题汇总
moses1213
积跬步,至千里;积小流,成江海!
展开
-
堆盘子问题
题目:设想有一堆盘子,堆太高可能会倒下来。因此,在现实生活中,盘子堆到一定高度时,我们就会另外堆一堆盘子。请实现数据结构SetOfStacks,模拟这种行为。SetOfStacks应该由多个栈组成,并且在前一个栈填满时新建一个栈。此外,SetOfStacks.push()和SetOfStacks.pop()应该与普通栈的操作方法相同(也就是说,pop()返回的值,应该跟只有一个栈时的情况一样)。原创 2016-07-19 20:17:39 · 585 阅读 · 0 评论 -
递归解决汉诺塔问题
题目:在经典问题汉诺塔中,有三根柱子及N个不同大小的穿孔圆盘,盘子可以任意滑入一根柱子。一开始,所有盘子自底向上从大到小一次套在第一根柱子上(即每一个盘子只能放在更大的盘子上面)。移动圆盘时有以下限制:(1)每次只能移动一个盘子;(2)盘子只能从柱子顶端滑出移动到下一根柱子;(3)盘子只能叠在比它大的盘子上。请运用栈,编写程序将所有盘子从第一根柱子移到最后一根柱子。原创 2016-07-20 10:43:58 · 645 阅读 · 0 评论 -
按升序对栈进行排序
题目:编写程序,按升序对栈进行排序(即最大元素位于栈顶)。最多只能使用一个额外的栈存放临时数据,但不得将元素复制到别的数据结构(如数组)。 思路:假设数据保存在原栈s1中,另设辅助栈s2。数据进行一系列处理后以升序排在栈s1中,那么s1中的数据一定是由s2栈倾倒出的。所以在完成所有数据在s1中升序排列之前数据应该在s2中降序排列,即大元素位于栈底。所以问题转化为从s1中弹出元素输入到s2原创 2016-07-21 16:55:35 · 7009 阅读 · 2 评论