如何从两个排序的堆栈中制作一个排序堆栈(顶部)



这是一个完整的问题:

编写一种Java方法,该方法将采用两个排序的堆栈A和B(顶部的最小(,然后返回一个分类的堆栈D(顶部最小(。您只能使用堆栈操作,例如流行,推,iSempty和peek。

示例:假设a = {(top(1,4,7,9}和b = {(top(2,3,6},然后该函数将返回新的堆栈D = {(上(1,2,3,4,6,7,9}

我写了这样的代码:

     Public static stack myStack ( Stack A , Stack B) {
Stack D = new Stack();
D= A.length()+ B.length();
for ( int i = 0 ; i < D.length ; i++)
{
      if( A.top== -1)
             System.out.println(" Stack is Empty ");
      return A[ top ] ;
            if( B.top== -1)
                 System.out.println(" Stack is Empty ");
             return B[ top ] ;
                   if ( A[top] < B[top])
                      D[top]= A[top];
                   else
                       D[top]= B[top];
  } 
 return D;
}

您怎么看?

请记住,练习要求您仅使用堆栈操作(按下,弹出,窥视和ISEMPTY(,因此您无法在尝试执行时执行直接索引。但是某些逻辑非常接近有效。

正如我在评论中建议的那样,我首先要编写一种可以反向堆栈的方法。这似乎现在似乎不太重要,但是很有用。而且,如果您考虑一个人如何扭转字面堆栈的顺序,这非常简单 - 将其从一个堆栈中删除并将其放在另一个堆栈的顶部。重复此操作,直到第一个堆栈为空,并且您已将订单倒转。

为什么有用?因为您的大多数方法都将构建所需内容的对面 - 您将构建一个堆栈,顶部最大项目,然后作为最后一步,将其倒转。

因此,如果您想创建一个最大顶部的堆栈,那么您如何开始?好吧,此堆栈上最低的项目应该是最低。因此,请检查两个堆栈顶部的内容,并更喜欢最低的项目,因为第一个推入新堆栈。

虽然两个堆栈都有项目,但您可以继续这样做以建立堆栈。我建议您在一段时间内考虑IsEmpty

一旦一个 是空的,您只需将所有剩余的物品从其他堆栈推开即可完成此结构。您应该意识到可以做到这一点,而无需在几个while循环之外使用过多的控制流程,因为"从空列表中推动所有剩余的项目"实际上是一个毫无疑问的。

,就像我在开始时所说的那样,一旦您创建了此(最大值(堆栈,您需要做的就是逆转。

最新更新