队列可以仅使用哈希表来实现吗?



我的意思是实现只能独立分配少量(O(1)/O(log n))内存 - 队列的大部分数据必须在哈希表中。

编辑:此数据结构应支持(Push,Pop,Top,Len)操作,但在引擎盖下,它将使用哈希表,而不是链接列表/数组。所需的大部分 O(n) 内存将包含在哈希表中。

任何类似列表的数据结构都可以由哈希表表示,其中列表中的每个元素都映射到其位置。所以这个列表:[a, b, c, d]可以用这样的哈希表来表示:

0: a
1: b
2: c
3: d

队列是一种先进先出数据结构:先进先出。因此,元素的弹出顺序与推送顺序相同。它可以使用类似列表的数据结构进行建模,其中我们通过将它们添加到尾部来将新元素推送到列表中,并通过从头部获取元素来弹出元素。

实现只能独立分配少量(O(1)/O(log n))内存

独立于哈希表本身处理的唯一必要数据是headtail索引。

因此,使用[a, b, c, d]示例,我们的头部指向索引0(对应于a),尾部指向索引3(对应于d)。

将新元素推送到队列(例如e),我们用键tail + 1将其插入到我们的哈希表中,即4,我们将tail递增 1。

要弹出一个元素,我们在head位置获取该元素,将其从哈希表中删除,然后将head递增 1。

在此之后,我们的哈希表结束如下:

1: b
2: c
3: d
4: e

通过此实现,实现toplen变得微不足道。

这个基本思想可以扩展到处理更复杂的哈希表。

我遇到了这个问题。 在谷歌搜索之后,是否建议这样做。据我所知,队列的目标是具有恒定的检索时间和恒定的删除时间。0(1).最好的实现是链表方法或使用"Unshift"和"pop"方法的数组

最新更新