c++数据结构与算法

自组织链表:用于提高查找效率。依赖于数据的配置,为此需要重新组织链表中已有的数据。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值