Data structures 指针和对象的实现

Data structures 指针和对象的实现,data-structures,Data Structures,这是双链接列表的多数组表示形式的图像。具有键4的对象跟随原始链接列表中具有键16的对象。此处4出现在键[2]中,16出现在键[5]中。这里的概念是使用不带指针和对象的数组实现一个双链接列表。有人能解释一下这些元素是如何相互链接的。第一个元素有键9,存储在索引[7]。您之所以知道这一点,是因为L包含列表头的索引(7)。果然,您可以看到它没有“prev”值 从这里开始,列表中的下一项存储在索引[5]中。(这是它在索引[7]的数组中的“下一步”中告诉我们的。此单元格的键为16 从这里我们继续看[2],


这是双链接列表的多数组表示形式的图像。具有键4的对象跟随原始链接列表中具有键16的对象。此处4出现在键[2]中,16出现在键[5]中。这里的概念是使用不带指针和对象的数组实现一个双链接列表。有人能解释一下这些元素是如何相互链接的。

第一个元素有键
9
,存储在索引
[7]
。您之所以知道这一点,是因为
L
包含列表头的索引(7)。果然,您可以看到它没有“prev”值

从这里开始,列表中的下一项存储在索引
[5]
中。(这是它在索引
[7]
的数组中的“下一步”中告诉我们的。此单元格的键为
16

从这里我们继续看
[2]
,键为
4
,键为
[3]
键为
1
。这是列表中的最后一项,因为它没有“下一步”


如果你想往回看,你也可以看看“prev”值。需要注意的是,“next”和“prev”包含与“key”完全不同类型的数字NeXT和PREV是指数组索引,并且基本上取代了在这个实现中指针的位置。Key包含一个数值,表示列表中的那个节点的实际内容。

< P>您的数据结构将正常工作。如果您正在编码C++,则只需定义SisiHyt的NeXT和PREV。,我看不出有什么价值

  • 转到下一个元素需要额外的数学运算。使用指针链接的传统列表,您只需访问存储在pNext字段中的地址。使用链接列表,计算下一个元素的地址需要一次乘法和一次加法

  • 如果您的目标是优化内存布局以实现缓存友好性,那么在一些列表实现中已经做到了。例如,Microsoft在ATL中的实现就是这样做的。不是使用新运算符分配元素,而是CAtlList类成批分配元素,这就是为什么当使用Benchmarker时,标准STL列表的工作速度通常慢2倍他反对微软的版本


  • 那么,当前next/key/prev对的next字段中的每个值都是下一对的索引?实际上我也没有正确理解这个概念,在这种情况下我有点困惑