顺序表和链表的比较
顺序表和链表各有短长。在实际应用中究竟选用哪一种存储结构呢?这要根据具体问题的要求和性质来决定。通常有以下几方面的考虑:
┌─── ┬───────────────
顺序表 链表
├─┬─ ┼───────────────
│基│分│静态分配。程序执行之前必须明确 动态分配只要内存空间尚有空闲,
│于│配│规定存储规模。若线性表长度n变
就不会产生溢出。因此,当线性表
│空│方│化较大,则存储规模难于预先确定 的长度变化较大,难以估计其存储
│间│式│估计过大将造成空间浪费,估计太 规模时,以采用动态链表作为存储
│考│ │小又将使空间溢出机会增多。 结构为好。
│虑
存 为1。当线性表的长度变化不大, <1
储 易于事先确定其大小时,为了节约
密 存储空间,宜采用顺序表作为存储
度 结构。
│基 存 随机存取结构,对表中任一结点都 顺序存取结构,链表中的结点,需
│于 取 可在O(1)时间内直接取得 从头指针起顺着链扫描才能取得。
│时 方 线性表的操作主要是进行查找,很
│间 法 少做插入和删除操作时,采用顺序
│考 表做存储结构为宜。
│虑
│ │插 │在顺序表中进行插入和删除,平均 在链表中的任何位置上进行插入和
│ │入 │要移动表中近一半的结点,尤其是 删除,都只需要修改指针。对于频
│ │删 │当每个结点的信息量较大时,移动 繁进行插入和删除的线性表,宜采
│ │除 │结点的时间开销就相当可观。 用链表做存储结构。若表的插入和
│ │操 │
删除主要发生在表的首尾两端,则
│ │作 │
采用尾指针表示的单循环链表为宜
存储密度(Storage Density)是指结点数据本身所占的存储量和整个结点结构所占的存储量之比,即
存储密度=(结点数据本身所占的存储量)/(结点结构所占的存储总量)