Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.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

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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/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
Algorithm 将2个堆栈的所有值添加到1个堆栈并对其排序_Algorithm_Sorting_Stack - Fatal编程技术网

Algorithm 将2个堆栈的所有值添加到1个堆栈并对其排序

Algorithm 将2个堆栈的所有值添加到1个堆栈并对其排序,algorithm,sorting,stack,Algorithm,Sorting,Stack,有3个堆栈-A、B、C 堆栈A和B被排序(堆栈顶部的数字最大)。 堆栈C是空的 仅允许5次操作: push pop top is_empty create 我们需要编写一个函数来接收堆栈a和B,将堆栈a和B中的所有数字移动到堆栈C,堆栈C必须排序(最大的数字在顶部)。查找标准问题/谜题。对于第一个切题,将问题分为两部分: 将元素从A和B移动到C中,最少的元素位于顶部 将顶部元素最少的C转换为顶部元素最多的C,即颠倒排序顺序 一旦你有了这个,你可以看看是否有更好/更有效的算法。当堆栈被排

有3个堆栈-A、B、C

堆栈A和B被排序(堆栈顶部的数字最大)。 堆栈C是空的 仅允许5次操作:

push
pop 
top 
is_empty
create

我们需要编写一个函数来接收堆栈a和B,将堆栈a和B中的所有数字移动到堆栈C,堆栈C必须排序(最大的数字在顶部)。

查找标准问题/谜题。

对于第一个切题,将问题分为两部分:

  • 将元素从A和B移动到C中,最少的元素位于顶部
  • 将顶部元素最少的C转换为顶部元素最多的C,即颠倒排序顺序

一旦你有了这个,你可以看看是否有更好/更有效的算法。

当堆栈被排序时,你可以应用合并排序机制。我的想法与user1930928相似。但增加这一点是为了数据反转的更清晰和扩展

算法如下

  • 比较A的顶部和B的顶部

  • 弹出最小的元素并推送到堆栈C

  • 重复步骤2,直到任何堆栈(A或B)变为空

  • 将剩余元素从非空堆栈移动到C。 现在所有的元素都是C,但都是按升序排列的。(这是顶部的最小元素)

  • 将所有元素从C移到A。(A中的内容按降序排列)

  • 将所有元素从A移到B。(B中的内容按升序排列)

  • 将所有元素从B移到C

  • 现在C的内容是按降序排序的,这是期望的结果


    我鼓励你尝试写这个程序。如果你真的想写,我可以写。

    堆栈C是未排序的还是空的?还有,你试过什么?好的问题应该表现出你自己解决问题的努力。-1感谢你没有表现出任何努力。create操作应该做什么?当然可以。实际上,谜题正是你的程序应该建模的。提示:尝试将问题描述中的对象与代码实体匹配。如果你没有成功,就按数字去做。我只需要知道如何移动数字就行了。。1.)将它们全部移动到堆栈C,然后对它们进行排序2.)从a的顶部弹出一个值,从B的顶部弹出一个值,看看谁更大,然后将它们插入到C。。“哪一个?”Waseemgabor说,“河内塔问题正是你需要解决的问题。”。如果一堆光盘与光盘堆无关,那么什么都不起作用。如果您仍然无法想象问题的等价性,请想象对河内塔问题的修改,其中光盘堆叠在最大的顶部,并且必须移动到第三个peg(堆叠C),最大的在顶部。谢谢。。但是有人能为它编写代码吗?不使用结构。。就5个操作而言,河内塔楼的变化限制较少(并非每一步都需要订购,且起始位置不同)。这可能足以让另一种方法更有效。While(!is_empty(a)){if(top(a)>top(b))push(c,pop(a))else if(top(a)