创建新的堆栈操作

时间:2013-10-23 01:46:26

标签: java time stack

我正在做一个处理2个堆栈的练习堆栈问题。堆栈S和堆栈T它希望我们基本上创建一个名为bottom的新操作返回但不删除s的底部元素。因此,我对问题的分解以及如何执行此操作是首先使用元素填充堆栈S.接下来将用所有堆栈S'元素填充堆栈T,但是以相反的顺序填充,以便现在底部位于顶部。我的问题是,我知道如何创建初始堆栈S,但我不知道如何以相反的顺序填充堆栈T.另外,由于反向运行时间是多少?

2 个答案:

答案 0 :(得分:2)

如果您反复弹出堆栈S中的元素并在弹出时将它们推到堆栈T上,那么当S为空时,T将包含以前在S中的内容,但顺序相反。

  S      T

| 1 |  -----
| 2 |
| 3 |
-----

T.push(S.pop()) =>

  S      T

| 2 |  | 1 |
| 3 |  -----
-----

T.push(S.pop()) =>

  S      T

| 3 |  | 2 |
-----  | 1 |
       -----

T.push(S.pop()) =>

  S      T

-----  | 3 |
       | 2 |
       | 1 |
       -----

运行时间与S中的元素数量呈线性关系。

答案 1 :(得分:0)

  

堆栈S和堆栈T它希望我们基本上进行新的操作   调用bottom返回但不删除s

的底部元素

我没有看到如何在不违反Stack操作基础的情况下直接完成。你应该让用户唯一看到的是没有删除的东西,它是堆栈顶部的元素。

如果您想让用户看到底部的内容,您需要另一个堆栈,其中从S 推送所有弹出的元素。然后,在这个新堆栈顶部的任何内容都是堆栈S底部的任何内容。

现在,这似乎导致了你的第二个问题,不是吗?

所以,考虑这个可能的解决方案:
1.您将拥有一个名为int pushInto(Stack S,Stack T)的方法 2.当用户想要查看堆栈S的底部元素时,请调用此方法 然后,该方法将返回堆栈T顶部的元素,即S.的底部 4.此方法需要与方法结合使用:int getBottomElement(Stack S)
我想在一块石头上打两只鸟