设计一种将堆栈
S
和队列映射Q
到单个数组的数据表示M
。编写算法以从这两个数据对象中添加和删除元素。
说清楚是的,是功课!
我不是要答案,我只需要一个链接或可以引导我找到答案的东西,或者如果你能给我和可以应用它的例子,我是新手,你可以看到不是很好。
这个非常简单的指南将向您展示堆栈和队列之间的区别:http: //blog.bakhshi.eu/2005/11/stack-vs-queue.html
本质上,堆栈和队列的数据都可以存储在数组中。不同之处在于您选择从哪里取出新元素。对于堆栈,您取出的下一个元素('pop')是您放入的最后一个元素。对于队列,您取出的下一个元素是您放入的第一个元素。
一种方法是创建一个具有数组成员变量的类,然后具有一些方法:
addToQueueOrStack()
popFromQueue()
popFromStack()
首先,您应该知道什么是堆栈和队列。这两种数据结构有一些规律的行为(或操作限制)。
假设我们想把我们的数据放在一个管子里。队列 Q 是一个管道,我们将数据放在一侧,然后将数据弹出到另一侧;而堆栈 S 是我们在同一侧放置和弹出数据的管,而另一侧永远不可访问。
根据您的要求,给定的数组 M 是我们想要放置数据的原始管,我们需要做的是给这个管添加一些操作限制。
在队列 Q 和堆栈 S 中,我们可以将第一个数据放在 array[0] 中,第二个数据在 array[1] 中的前一个数据之后,第三个数据在 array[2] 中,依此类推。我们总是将新数据放在一侧(如数组的“尾部”)。对于队列Q,我们要弹出与我们放入数据的那一侧不同的数据,所以先弹出array[0]处的数据,然后再弹出array[1]处的数据,即:这个地方存放数据,并且数组的索引最小. 对于栈S,我们应该在我们放入数据的同一侧弹出数据,所以首先在“尾部”弹出数据,即:存放数据的地方,并且具有数组的最大索引。
数组的大小是固定的,所以当你的数据到达数组的边缘时要小心。祝你好运。^_^