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