如果列表变大,访问链接列表中的节点会变得非常慢。我确实想到了一种加速访问的方法:有一个数组(也是一个LL),每隔100个节点都有一个快捷方式。这样,如果我想获得第205个元素,程序将不得不通过这个"路径":short cut to [100] -> short cut to [200] -> [201] -> ... -> [205]
。通过整个LL到第205个元素 - 步骤"而不是204,这要快得多。是的,如果我想要第n百和第99个元素,它会变慢,但是该程序将跳过LL的大部分内容 - 从长远来看更快。
但是这些捷径需要在添加和删除更多元素后重新调整。删除不是一个真正的问题 - 删除元素并设置某些快捷方式以指向下一个节点 - 那些指向正式的第n百个节点的节点。添加更多数据是一个问题 - 添加新元素时,必须将某些节点设置为指向前一个节点。为了获得这些元素,程序必须从列表开始,从最后一个仍然指向第n百个元素的快捷方式开始。除非节点也指向前面的元素,否则整个过程可能会像我从向量中删除元素一样慢。
有没有办法加快访问速度,保持添加和删除元素的过程相当快?这只是一个好奇的问题,而不是在真实的程序中使用它是一个好主意。
答案 0 :(得分:0)
您使用了错误的数据结构。链接列表最适用于按顺序访问的列表,而不适用于随机访问的集合。为此,您最好使用某种哈希表。