知识卡片
邻接表与链表在访问速度与修改灵活性上的取舍
内容
存储列表有两种根本不同的方式:邻接表把所有项存进一整块连续的存储单元,靠固定的项长直接算出任意位置的地址,随机访问极快,但插入或删除一项通常要把后面所有项集体搬移,最坏情况甚至要把整个列表迁到一块更大的空闲区域;链表把每一项拆成”数据+指向下一项的指针”两部分、分散存放在不连续的存储块里,插入或删除只需要改动一两个指针,不必挪动其他项,代价是访问中间某一项必须从头顺着指针链一路走过去,无法直接跳转。发散:这是计算机科学里”随机访问速度”和”修改灵活性”这对经典权衡最朴素的呈现——邻接表把代价预先摊在”结构不常变、只是常被读”的场景里最划算,链表则把代价换到了”结构频繁增删、访问模式偏顺序遍历”的场景里最划算,这个权衡原型后续会以数组 vs 链表、B 树 vs 跳表等各种变体反复出现在几乎所有存储系统的设计决策中。
参考来源
《计算机科学概论》第8章《数据抽象》