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