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