Algorithm 将2个堆栈的所有值添加到1个堆栈并对其排序
有3个堆栈-A、B、C 堆栈A和B被排序(堆栈顶部的数字最大)。 堆栈C是空的 仅允许5次操作: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,即颠倒排序顺序 一旦你有了这个,你可以看看是否有更好/更有效的算法。当堆栈被排
push
pop
top
is_empty
create
我们需要编写一个函数来接收堆栈a和B,将堆栈a和B中的所有数字移动到堆栈C,堆栈C必须排序(最大的数字在顶部)。查找标准问题/谜题。对于第一个切题,将问题分为两部分:
- 将元素从A和B移动到C中,最少的元素位于顶部
- 将顶部元素最少的C转换为顶部元素最多的C,即颠倒排序顺序
一旦你有了这个,你可以看看是否有更好/更有效的算法。当堆栈被排序时,你可以应用合并排序机制。我的想法与user1930928相似。但增加这一点是为了数据反转的更清晰和扩展 算法如下
我鼓励你尝试写这个程序。如果你真的想写,我可以写。堆栈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)