自组织链表:用于提高查找效率。依赖于数据的配置,为此需要重新组织链表中已有的数据。
- 前移法:在找到需要的元素后,把他放到链表的开头。
- 换位法:在找到元素后,只要不在链表的开头,就与其前驱交换位置。
- 计数法:根据元素被访问的位置,对链表进行排序。
- 排序法:根据信息的自身属性,对链表进行排序。
前三种方法,新信息储存到链表末尾的新增节点中。最后一种方法放在链表的某个位置,以保持链表的顺序。
前三种方法最有可能在链表头的附近找到元素,使用前移法最明确,而使用换位法要特别谨慎。排序法用到了链表信息中一些固有属性。计数法可以归为排序法。但是在大多数情况下访问次数只是用于维护链表的附加信息,因此不是信息的固有属性。对这些方法的分析将其效率和最佳静态排序比较在最佳静态排序中所有数据根据在数据体中出现的频率排序,因此这种链表仅仅适用于查找而不适合插入,因此该方法扫描数据体两次。一次建立链表一次用于链表进行查找。通过实际测量这些方法的效率,可以将比较次数与可能最大的比较次数相对比。可能的最大比较次数是将链表处理每个元素时长度的增加。分析表明计数法和前移法的开销最多可达最佳静态排序法的两倍;而换位法的开销接近前移法。根据摊销分析,用前移法访问链表元素的开销最多是用最佳静态排序链表的两倍。
在链表的前端插入比在后端插入更高效,前移法以及计数法的效率几乎相同,且两种方法都比换位法普通法和排序法好。如果包含跳跃链表效果更好。
对于中等大小的表使用链表就足够了。