顺序表和链表的比较

一.顺序表:
1.1.从空间角度:
分配方式:静态分配
存储密度:为1
1.2.从时间角度:
存取方式:随机存取
操作:插入删除:O(N) ; 按序访问:O(1);

二.链表:
2.1.从空间角度:
分配方式:动态分配
存储密度:小于1
2.2.从时间角度:
存取方式:顺序存取

三.顺序存储的优点:
1.方便简单,各种高级语言中都有数组,容易实现;
2.不用为表示结点间的逻辑关系而增加额外的存储开销;
3.顺序表具有按元素序号随机访问的特点,非常简介便利。

四.顺序存储的缺点:
1.在顺序表中做插入,删除操作时,平均移动大约表中一半的元素,因此n较大的顺序表这两种运算效率低;
2.需要预先分配足够大的存储空间,估计过大,可能会导致顺序表后部大量闲置;预先分配过小,又会造成溢出;

五.链表的主要优点:
1.无须事先了解线性表的长度;
2.允许线性表的长度有很大变化;
3.能够适应经常插入,删除内部元素的情况;
4.通过建立双向或循环链表提高访问效率;

六.存储结构的选择:
1.基于存储的考虑:
顺序表的存储空间是静态分配的,在程序执行之前必须明确规定它的存储规模,即事先对”MAXSIZE”要有合适的设定,过大造成浪费,过小造成溢出。在对线性表的长度或存储规模难以估计时,不宜采用顺序表;链表不用事先估计存储规模。
2.基于运算的考虑:
如果经常做的运算是按序号访问数据元素,显然顺序表优于链表;在顺序表中做插入,删除时,平均移动表中一半的元素,当数据元素的信息量较大且表较长时,这一点是不应该忽视的;在链表中做插入,删除,虽然也要找插入位置,但操作主要是比较操作,从这个角度考虑显然链表优于顺序表。
3.基于环境的考虑:
顺序表容易实现,任何高级语言中都有数组类型,链表的操作是基于指针的,相对来讲前者简单些。

你可能感兴趣的:(数据结构,顺序表,链表)