可能是太容易的问题,但请分享如何反转任何类型的堆栈?如何反转堆栈?
如何反转堆栈?
回答
make new stack;
while (old stack not empty)
x = pop(old stack)
push x on new stack
或拨打堆栈reverse
,但要注意,如果应用到mutable.Stack
返回一个List
。如果您使用immutable.Stack
,它确实会返回Stack
。
只是循环周围从中弹出值,并推入另一个栈。
public void reverse(Stack st) {
int m = (int)st.Pop();
if (st.Count != 1)
reverse(st);
Push(st , m);
}
public void Push(Stack st , int a) {
int m = (int)st.Pop();
if (st.Count != 0)
Push(st , a);
else
st.Push(a);
st.Push(m);
}
这不起作用*就地*。它使用O(N)附加内存。 – 2011-03-22 16:40:53
正确的答案可能是“不要倒转堆栈”。
如果某些约束意味着你绝对要扭转一个堆栈,你的问题已经回答。但是,我忍不住想知道为什么想要反转一个堆栈 - 对我来说,这意味着你正在使用错误的数据结构。
如果其所有推,然后反向,那么所有的持久性有机污染物;这是一个队列。
如果推动,弹出和反转按随机顺序混合在一起,您可能需要一个专门支持这些操作的数据结构......当有人读取“堆栈”但该结构确实是别的东西时,这会令人困惑。
不确定阶,但某些语言有双端队列特别代表访问的头部和尾部元素的线性集合 - 这可能正是你需要的。如果不是,双链表将很好地做到;或者如果一个O(n)012-等效不是一个问题,那么一个普通的旧列表将会执行。
如果您的pop()
等效操作不知道从哪个末端获取元素(例如,一段代码正在调用反向,而另一些代码只是说“给我一个元素”并且不知道是否已调用reverse),请按照以下方式用方向标志封装队列。这将使您获得相同的功能,而不必实际取消任何操作。
(对不起,我很伪代码,Scala是不是在我的工具箱)。
ReversableStack {
DoublyLinkedList backingStore;
Boolean forward;
get() {
if (forward) return backingStore.take_head();
else return backingStore.take_tail();
}
put(item) {
if (forward) backingStore.add_head(item);
else backingStore.add_tail(item);
}
reverse() {
forward = !forward;
}
}
“不要颠倒堆叠”。 - 相当真实。不幸的是,'Stack'和'Queue'都扩展了Scala中的标准收集特性。 – Raphael 2011-03-24 16:21:10
- 1. 递归反转堆栈
- 2. 使用堆栈反转字符串
- 3. 反转从堆栈中的字符串
- 4. (C++)使用堆栈反转字符串?
- 5. Java堆栈反省
- 6. 如何才能使用堆栈反转字符串?
- 7. 我想实现一个队列,将反转堆栈和打印堆栈FIFO?
- 8. 反向堆栈元素C++
- 9. UWSGI堆栈转储
- 10. 堆栈转储使用alloc
- 11. 如何在不使用额外空间的情况下反转堆栈... fp-style
- 12. JVM - 堆栈和堆栈
- 13. 希望堆栈堆栈?
- 14. MIPs程序使用堆栈反转字符串
- 15. 使用基于链表的堆栈反转字符串
- 16. 在列表框中反转堆栈项目WP7
- 17. 仅在Java中使用队列来反转堆栈?
- 18. 反应本地堆栈导航标题
- 19. 关于此后端堆栈的反馈
- 20. JOptionDialog显示堆栈如何?
- 21. CopyOnWriteArrayList - 如何更新堆栈?
- 22. 如何升级堆栈GHC
- 23. 如何显示堆栈C
- 24. 如何堆栈跟踪extlib?
- 25. 如何粉碎堆栈?
- 26. 堆栈在C,如何
- 27. 汞:如何在堆栈
- 28. 堆栈如何工作?
- 29. 堆栈或堆
- 30. 字符堆栈,字符串堆栈,整数堆栈,整数数组堆栈等
您是否试过'stack.reverse'? – tenshi 2011-03-22 16:33:29
如果你指的是不可变的版本,那么它只是一个'List',所以反向工作。 – 2011-03-22 16:36:56
这是功课,不是吗?你应该添加作业标签。 – 2011-03-22 18:40:25