1、基于空间的比较
(1)存储分配的方式
顺序表的存储空间是一次性分配的。
链表的存储空间是多次分配的。
(2)存储密度(存储密度=结点值域所占的存储量 / 结点结构所占的存储总量)
顺序表的存储密度=1。
链表的存储密度<1(因为结点 中有指针域)。
2、基于时间的比较
(1)存取方式
顺序表可以随机存取,也可以顺序存储(对于顺序表,一般是随机存取)。
链表只能顺序存取(所谓存储存取,以读取为例,要读取某个元素必须遍历其之前的所有元素才能找到它并读取)。
(2)插入 / 删除时移动元素的个数
顺序表平均需要移动近一般元素。
链表不需要移动元素,只需要修改指针。
对顺序表进行插入和删除算法时间复杂度分析
问题:具有n个元素的顺序表,依次从1到n排列,插入一个元素所进行的平均移动个数为多少?
分析:因为上述问题要计算平均移动个数,即要计算移动个数的期望。对于所要计算期望,只需要所有可能的位置插入元素时对应的元素移动个数以及每个位置发生插入操作的概率。
(1)求概率
因为插入位置的选择是随机的,所以所有位置被插入的可能性都是相同的,有n个可插入位置,所以任何一个位置被插入元素的概率都为p=1 / n。
(2)求对应于每个插入位置需要移动的元素个数。
假设要把新元素插入在表中第i个元素之后,则需要将第i个元素之后的所有元素往后移动一个位置,因此移动元素个数为n-i。
综上可得,移动元素个数的期望E为:,也就是说要移动一半元素,插入和删除(与插入相似)的平均时间复杂度O(n)。