使用栈实现数组
一种语言没有数组作为数据类型,但它有堆栈作为数据类型,并且可以声明堆栈;并定义了 push
、pop
和 isempty
操作。
那么我们如何使用两个栈以及以上操作来实现数组呢?
A language has not array as a data type but it has stack as a data type and one can declare stack's; and push
, pop
and isempty
operations are defined.
So how can we implement array using two stacks and above operations?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
效率极其低下 - 但是:
Stack 1 包含详细信息
堆栈 2 为空。
要遍历数组,请弹出堆栈 1 ,当您需要下一个时,请将前一个放入堆栈 2 中,然后再次弹出堆栈 1 。重复直到“isempty”。
如果你想要第N个值,则将非空堆栈弹出N次,同时将不需要的推入另一个堆栈。然后当你玩完它后,将其清空到另一个堆栈中。请注意,这会翻转顺序。
Horribly inefficient - but:
Stack 1 Contains the details
Stack 2 is empty.
To go through the array, Pop Stack 1 , when you want the next one, push the previous one into stack 2 and pop stack 1 again. Repeat until 'isempty'.
If you want the Nth value, pop the not empty stack N times while pushing the unneeded ones into the other stack. Then when you're done playing with it, empty it into the other stack. Note that this;ll flip the order.
使用两个堆栈,您可以获得某种随机访问(这就是您对数组感兴趣的内容),如下所示:
通过将元素从一个堆栈传递到另一个堆栈,可以模拟迭代。
With two stacks you can get some sort of random access (which is what you're interested in an array) like this:
By passing elements from one stack to another you simulate iteration.
数组的第一个元素是 stack1 的底部;
数组的最后一个元素是 stack2 的底部;
数组的当前元素是 stack1 的顶部;
通过将 stack1 的元素移至 stack2(移至开头)来迭代数组,反之亦然(移至结尾)。
First element of array is a bottom of stack1;
Last element of array is a bottom of stack2;
Current element of array is a top of stack1;
Iterates through the array by shifting the elements of the stack1 to stack2(move to the begin) and vice versa (move to end).