Data structures 像堆栈一样引入数据并像哈希表一样存储在存储桶中的数据结构?
我需要一个像堆栈一样引入数据的算法,这样当我扫描结构时,我可以按照引入的顺序读取它们,以便进行顺序访问。此外,这些值存储在bucket中,就像哈希表一样,因此我可以将整个结构分割为磁盘存储,并进行快速随机访问 有这样的算法吗,或者我应该有两个独立的结构?最好的策略是什么Data structures 像堆栈一样引入数据并像哈希表一样存储在存储桶中的数据结构?,data-structures,stack,hashtable,Data Structures,Stack,Hashtable,我需要一个像堆栈一样引入数据的算法,这样当我扫描结构时,我可以按照引入的顺序读取它们,以便进行顺序访问。此外,这些值存储在bucket中,就像哈希表一样,因此我可以将整个结构分割为磁盘存储,并进行快速随机访问 有这样的算法吗,或者我应该有两个独立的结构?最好的策略是什么 致以最良好的祝愿 我可能会这样做: 创建一个哈希表,在其中实际存储条目 创建一个堆栈,用于存储对象(而不是对象本身)的真实内存位置 将这两个结构抽象到一个类(或类似的东西)后面,以便对用户隐藏其真正的实现 我可能会这样做: 创建
致以最良好的祝愿 我可能会这样做:
我可能会这样做:
首先,我认为你的意思是“像队列一样引入数据”。堆栈将按与输入相反的顺序返回数据。(另外,我也不太清楚你所说的“引入数据”是什么意思——我不确定这是语言问题,还是我从未听说过的数据结构表达式)
我的建议是使用侵入式链表(链接存储在数据对象中的链表)来创建线性列表。然后可以将数据对象(带有链接)放入哈希表。首先,我认为您的意思是“像队列一样引入数据”。堆栈将按与输入相反的顺序返回数据。(另外,我也不太清楚你所说的“引入数据”是什么意思——我不确定这是语言问题,还是我从未听说过的数据结构表达式)
我的建议是使用侵入式链表(链接存储在数据对象中的链表)来创建线性列表。然后,您可以将数据对象(附加链接)放入哈希表中。这类似于有序映射,对吗?通常通过将链表与实现映射所需的任何内容(例如哈希表)组合来实现 在Ruby 1.9中,
Hash
类的规范(Ruby拼写“Map”的方式令人困惑)被更改,从而保留了插入顺序。据我所知,大多数Ruby1.9实现都将其作为列表和哈希表的某种组合来实现。Rubinius的实现特别容易阅读,因为它100%用Ruby编写:
Java有一个有序映射的实现,称为LinkedHashMap
。以下是来自Oracle OpenJDK 7的源代码:
Apache Commons Collections有一个OrderedMap
接口和两个实现:和
如果您稍微小心一点,您应该能够保持无序映射的渐近复杂性保证。这类似于有序映射,对吗?通常通过将链表与实现映射所需的任何内容(例如哈希表)组合来实现 在Ruby 1.9中,
Hash
类的规范(Ruby拼写“Map”的方式令人困惑)被更改,从而保留了插入顺序。据我所知,大多数Ruby1.9实现都将其作为列表和哈希表的某种组合来实现。Rubinius的实现特别容易阅读,因为它100%用Ruby编写:
Java有一个有序映射的实现,称为LinkedHashMap
。以下是来自Oracle OpenJDK 7的源代码:
Apache Commons Collections有一个OrderedMap
接口和两个实现:和
如果您稍微小心一点,您应该能够保持无序映射的渐进复杂性保证。就像stargazer指出的那样,一个具有两个数据结构的抽象类是实现这一点的一种方法。然而,也有一些考虑因素