我在一个面试网站上遇到了这个问题。该问题要求在单个数组中有效地实现三个堆栈,以便在整个数组空间中没有剩余空间之前没有堆栈溢出。
对于在一个数组中实现两个堆栈,很明显:第一个堆栈从左到右增长,第二个堆栈从右到左增长;当stackTopIndex交叉时,它发出溢出信号。
提前感谢你富有洞察力的回答。
发布于 2010-06-17 17:00:27
您可以使用实现三个堆栈:
链表可以在数组中实现。
这(空间)效率如何?
通过为每个列表元素(值+指针)使用数组的两个单元来构建链表是没有问题的。根据规范的不同,你甚至可以将指针和值放入一个数组元素中(例如,数组很长,而值和指针只是整型的)。
将其与kgiannakakis的解决方案进行比较...损失高达50% (仅在最坏的情况下)。但我认为我的解决方案更清晰一些(也许更学术,这对于面试问题^^应该没有什么坏处)。
发布于 2010-06-20 08:31:54
请参阅Knuth, The Art of Computer Programming, Volume 1,第2.2.2节。标题为“顺序分配”。讨论在单个数组中分配多个队列/堆栈,以及处理溢出的算法等。
发布于 2010-08-16 23:49:33
我们可以使用长位数组来表示第i个数组单元属于哪个堆栈。我们可以取模3的值(00 -空,01 - A,10 - B,11 - C)。对于N大小的数组,需要N/2位或N/4字节的额外内存。
例如,对于1024个长整型元素(4096字节),只需要256个字节或6%。
这个位数组映射可以放在相同的数组中,在开始或结束时,只需将给定数组的大小缩小6%!
https://stackoverflow.com/questions/3060104
复制相似问题