我的老师给了我以下练习:
"给定两个排序堆栈,stack1
和stack2
,设计一个算法来创建新排序堆栈,{{ 1}},合并stack3
和stack1
"
我在找到解决此练习的最简单方法时遇到问题,有人可以向我推荐简单方法吗?我想也许我可以将stack2
和stack1
存储到其他一些结构(也许是数组?)然后继续进行排序但这看起来很长,我想知道是否还有其他一些简单的方法。
P.S。:我只能使用stack2
和push
从堆栈中插入/提取元素。
答案 0 :(得分:0)
关于这个问题要记住的是堆栈已经排序了。你会怎么做这个人?
我的猜测是你会做类似以下的事情:
1。查看每个堆栈中的顶部元素并比较这两个元素。
2。哪个更大(或更小,取决于它们的排序方式)将被添加到新堆栈
3。重复。
也许尝试将这个人类算法解释为伪代码并尝试实现它,你可能会得到一些有用的东西。我希望能引导你朝着正确的方向前进!
答案 1 :(得分:0)
之所以必须颠倒顺序,是因为您一次只能访问堆栈的顶部元素进行比较和弹出。
这意味着无论stack1和stack2是降序还是升序,您都需要创建两个新的堆栈。
//reverses the order of the helperStack
//and pushes result into new sortedStack
while(!helperStack.empty())
{
sortedStack.push(helperStack.pop());
}