顺序存储和链式存储各自的优缺点及其比较和选择
顺序存储:
顺序存储的优点:
1、逻辑结构与物理结构是统一的,其中的元素都是顺序存储的;
2、方法简单,好理解,各种语言中都有数组,易实现;
3、不用为结点间的逻辑关系而增加额外的存储空间;
4、表中数据元素可随机存取,顺序表具有按元素序号随机访问的特点;
5、存储密度大,存储密度为1(存储密度是指一个结点中数据元素所占的存储单元和整个结点所占的存储单元之比)。
顺序存储的缺点:
1、做插入、删除操作时,要移动大量元素,因此对很长的顺序表操作效率低,插入和删除操作不方便;
2、要预先分配存储空间,预先估计过大,会导致存储空间浪费,估计过小,会造成数据溢出。
链式存储:
链式存储的优点:
1、做插入、删除操作时很方便,不需要移动数据元素,动态性强;
2、不用预先估计存储空间的规模。
链式存储的缺点:
1、链式存储的操作是基于指针的,但不是所有的语言中都有指针类型;
2、对每个数据元素而言,除了自身信息外,还需要一起存放其后继存储单元的地址,这两部分共同组成一个结点;
3、存储密度小,存储密度小于1;
4、表中数据元素不可随机存取。
顺序存储和链式存储的比较和选择:
1、基于存储空间
顺序表的存储空间是静态分配的,在程序执行之前必须明确规定它的存储规模。链表不用事先估计存储规模,但链表的存储密度较低。顺序存储结构的存储密度是1,而链式存储结构的存储密度小于1。
2、基于运算
在顺序表中按序号访问
ai
a
i
的时间复杂度为O(1),而链表中按序号访问的时间复杂度为O(n)。
3、基于环境
顺序表容易实现,在任何高级语言中都有数组类型,链表的操作是基于指针的,相对来讲顺序表简单些。
总之,两种存储结构各有优势,选择哪一种结构依据实际问题而定。一般来讲,较稳定的线性表选择顺序存储,而频繁的做插入、删除操作的动态性较强的线性表选择链式存储更为合适。