合并两个已排序的堆栈

时间:2015-06-10 18:17:27

标签: sorting merge stack abstract-data-type

我的老师给了我以下练习:

"给定两个排序堆栈stack1stack2,设计一个算法来创建新排序堆栈,{{ 1}},合并stack3stack1"

我在找到解决此练习的最简单方法时遇到问题,有人可以向我推荐简单方法吗?我想也许我可以将stack2stack1存储到其他一些结构(也许是数组?)然后继续进行排序但这看起来很长,我想知道是否还有其他一些简单的方法。

P.S。:我只能使用stack2push从堆栈中插入/提取元素。

2 个答案:

答案 0 :(得分:0)

关于这个问题要记住的是堆栈已经排序了。你会怎么做这个人?

我的猜测是你会做类似以下的事情:

1。查看每个堆栈中的顶部元素并比较这两个元素。

2。哪个更大(或更小,取决于它们的排序方式)将被添加到新堆栈

3。重复。

也许尝试将这个人类算法解释为伪代码并尝试实现它,你可能会得到一些有用的东西。我希望能引导你朝着正确的方向前进!

答案 1 :(得分:0)

之所以必须颠倒顺序,是因为您一次只能访问堆栈的顶部元素进行比较和弹出。

这意味着无论stack1和stack2是降序还是升序,您都需要创建两个新的堆栈。

  • 第一个新堆栈(helperStack)是将比较/弹出的元素压入其中的内容
  • 第二个新堆栈(sortedStack)的唯一目的是按照相反的顺序放置它们,可以通过以下方式完成:

//reverses the order of the helperStack
//and pushes result into new sortedStack

while(!helperStack.empty())
   {
   sortedStack.push(helperStack.pop());
   }