2013-05-14 38 views
-3

有3个栈 - A,B,C添加的2个栈的所有值以1堆并对它们排序

堆栈A和B被排序(在堆栈的顶部的数目是最大的)。 堆栈C是空 只有5操作被允许:

push 
pop 
top 
is_empty 
create 

我们需要写接收栈A和B的功能,将所有的号码栈A和B叠C和堆栈c必须是排序(最大的数字在上面)。

+0

堆栈C未分类还是空的? – Dukeling 2013-05-14 15:20:33

+1

另外,你有什么尝试?好的[所以]问题应该显示你自己试图解决问题。 – Dukeling 2013-05-14 15:25:33

+2

-1没有显示任何努力。 – 2013-05-14 15:29:43

回答

2

对于第一切口,分裂问题分为两个部分:从A和B

  • 移动元件成C,用最少的元件是在顶部。
  • 将顶部最少元素C转换为顶部最高元素C,即颠倒排序顺序。

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

+0

+1,你几乎说了我的大脑 – bjskishore123 2013-05-14 17:08:11

+0

非常感谢你 – 2013-05-15 19:54:02

1

查找towers of hanoi,一个标准的问题/谜题。

+0

它与堆栈无关..当然它有 – 2013-05-14 16:02:17

+0

。其实这个难题正是你的程序应该建模的东西。提示:尝试将问题描述中的对象与代码实体进行匹配。如果你没有成功,那就去数字。 – collapsar 2013-05-14 16:04:04

+0

我只需要知道如何移动它们的方法.. 1.)将它们全部移动到堆栈C,然后对它们进行排序 2.)从A顶部弹出一个值并从顶部弹出一个值的B,看看谁更大,并将它们插入C .. 哪一个? – 2013-05-14 16:18:58

0

随着堆栈的排序,您可以应用合并排序机制。我的想法与user1930928类似。但是为了更加清晰和延伸数据逆转,增加了这一点。

算法如下

  1. 比较A的顶部与B的顶部

  2. 弹出的最小元素和推到堆栈Ç

  3. 重复步骤2,直到任何叠层的(A或B)变空

  4. 将剩余的元素从非空堆栈移到C. 现在,您拥有C中的所有元素,但按升序排列。 (这是最上面的元素)。

  5. 移动所有的从C到A.元件(在内容是按降序排列)

  6. 全部移动从A元素B.(B中的内容是按升序排列)

  7. 将所有从B元素C.

现在C的含量是在排序从高到低的顺序,这是期望的结果。

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

+0

while(!is_empty(a)) if(top(a)> top(b))push(c,pop(a)) else if (顶部(a)<顶部(b))推动(c,弹出(b)) if(!is_empty(b)push(c,pop(b)) else(老师说如果有2等于数字,我们只是插入其中的一个C) 而(!is_empty(C)) 推(一,流行(C)) 而(!is_empty(一)) 推(b,POP(一) ) while(!is_empty(b)) push(c,pop(b)) – 2013-05-15 13:25:03

相关问题