有3个堆栈 - A,B,C
堆栈A和B已排序(堆栈顶部的数字最大)。 堆栈C为空 只允许5次操作:
push
pop
top
is_empty
create
我们需要编写一个接收堆栈A和B的函数,将堆栈A和B中的所有数字移动到堆栈C,堆栈C必须排序(最大数字在顶部)。
答案 0 :(得分:2)
对于第一次剪切,将问题分成两部分:
一旦你有了这个,就可以看出是否有更好/更有效的算法。
答案 1 :(得分:1)
查找towers of hanoi,标准问题/难题。
答案 2 :(得分:0)
在对堆栈进行排序时,您可以应用合并排序机制。我的想法与user1930928类似。但是为了更清晰和扩展数据反转,添加这个。
算法如下
将A的顶部与B的顶部进行比较
弹出最少元素并推送到堆栈C
重复步骤2,直到任何堆栈(A或B)变空
将剩余的元素从非空堆栈移动到C. 现在你有C中的所有元素,但是按升序排列。 (这是最重要的元素)。
将所有元素从C移动到A.(A中的内容按降序排列)
将所有元素从A移动到B.(B中的内容按升序排列)
将所有元素从B移动到C.
现在C的内容按降序排序,这是期望的结果。
我鼓励你尝试编写程序。如果你真的想要,我可以写。