博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
《算法基础》——3.4 有序链表
阅读量:6910 次
发布时间:2019-06-27

本文共 582 字,大约阅读时间需要 1 分钟。

本节书摘来自华章计算机《算法基础》一书中的第3章,第3.4节,作者:(美)罗德·斯蒂芬斯(Rod Stephens)著,更多章节内容可以访问云栖社区“华章计算机”公众号查看

3.4 有序链表

有时,让链表中的项保持有序是十分方便的。当将一个新项加入有序链表时,需要搜索链表来找到该项所属位置,并更新相应的链接来插入该项。

下面的伪代码显示了在一个有序链表中插入一个项的算法:
screenshot

在最坏的情况下,该算法可能需要遍历整个链表为新项找到正确的位置。因此,如果该链表保存N个单元格,其运行时间为O(N)。虽然不能提高理论运行时间,但是可以通过添加底端哨兵使算法更简单而且在实际运行中更加快速。如果将底部哨兵的Value设定成一个比单元格中任意可能存储的Value值都大的值,就可以删除对top.Next!=null的测试。可以这样做是因为这个代码最终会为新的单元格找到一个合适的位置,即使该位置就在底部哨兵之前。

例如,如果单元格中的Value为使用ASCII字符表示的名字,可以设置底部哨兵的Value为“~”因为“~”字符在所有可用的字符中排名最后。如果单元格的Value为整数,就可以以最大可能的整数值来设置底部哨兵的Value。 (在大多数的32位系统中,该值为2 147 483 647。)
下面的伪代码显示了修改后的算法,并假设链表具有一个拥有最大值的底部哨兵:
screenshot

转载地址:http://ltbcl.baihongyu.com/

你可能感兴趣的文章
cell自适应网络图片大小
查看>>
decode()函数的简单使用
查看>>
第三次作业
查看>>
asf与vga视频为何无法同步播放?我来给你解释!
查看>>
H5----初识canvas
查看>>
Oracle PL/SQL学习之基础篇(1)
查看>>
深度学习500问,我觉得很不错
查看>>
关于nodejs的线程模型可以看这篇文章
查看>>
reactjs弹幕视频播放
查看>>
hdu 1106 排序
查看>>
1D1D动态规划优化
查看>>
洛谷 P2717 寒假作业
查看>>
xampp的安装和配置与HBuilder的配置--博客园老牛大讲堂
查看>>
OpenStack 多节点纳管 vCenter 5.5
查看>>
kafka快速入门
查看>>
1L - ASCII码排序
查看>>
jquery中的append和appendTo用法
查看>>
1172: 零起点学算法79——统计单词个数
查看>>
(转)asp.net页面跳转的三种方法比较
查看>>
CSS之文本
查看>>