Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sorting 合并两个排序堆栈_Sorting_Merge_Stack_Abstract Data Type - Fatal编程技术网

Sorting 合并两个排序堆栈

Sorting 合并两个排序堆栈,sorting,merge,stack,abstract-data-type,Sorting,Merge,Stack,Abstract Data Type,我的老师给了我以下练习: “给定两个排序堆栈,stack1和stack2,设计一个算法来创建新的排序堆栈,stack3,在stack1和stack2之间合并。” 我很难找到最简单的方法来解决这个问题,有人能推荐我最简单的方法吗?我想也许我可以将stack1和stack2存储到其他结构(可能是数组?)中,然后继续排序,但这看起来很长,我想知道是否有其他简单的方法 p.S.:我只能使用push和pop从堆栈中插入/提取元素。关于此问题,请记住堆栈已经排序。作为一个人,你会怎么做 我的猜测是,您将执行

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

“给定两个排序堆栈,
stack1
stack2
,设计一个算法来创建新的排序堆栈,
stack3
,在
stack1
stack2
之间合并。”

我很难找到最简单的方法来解决这个问题,有人能推荐我最简单的方法吗?我想也许我可以将
stack1
stack2
存储到其他结构(可能是数组?)中,然后继续排序,但这看起来很长,我想知道是否有其他简单的方法


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

关于此问题,请记住堆栈已经排序。作为一个人,你会怎么做

我的猜测是,您将执行以下操作:

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

2.较大的(或较小的,取决于排序方式)将添加到新堆栈中

3.重复


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

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

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

  • 第一个新堆栈(helperStack)是将比较/弹出的元素推入的堆栈
  • 第二个新堆栈(sortedStack)的唯一目的是将其按相反顺序放置,可通过以下方式完成:
//反转helperStack的顺序
//并将结果推送到新的sortedStack中
而(!helperStack.empty())
{
sortedStack.push(helperStack.pop());

}
这是一个合理的解决方案。我考虑过这一点,但我错过的是,在这个过程结束时,反转堆栈的顺序是必要的。