您的位置:首页 > 其它

比较总结线性表的几种主要存储结果

2017-10-15 21:52 253 查看
一、顺序表(顺序存储结构)

顺序表是用一段地址连续的存储单元依次存储线性表的数据元素,通常用一维数组来实现;

数据元素之间的逻辑关系是用存储位置表示的,顺序表是随机存取结构;

在实现插入和删除操作,在等概率情况下,平均要移动表中的一般的元素,算法的平均时间复杂度为O(n)。

优点是:无需为表示表中元素之间的逻辑关系而增加额外的存储空间;随机存取。

缺点:插入和删除操作需要移动大量元素;表的容量难以确定,造成存储空间的“碎片”。

二、单链表(链接存储结构)

单链表是用一组任意的存储单元存放线性表的元素,这组存储单元可以连续也可以不连续,甚至可以零散分布在内存中的任意位置;

头指针指向第一个元素所在的结点,具有标识一个单链表的作用;最后一个元素所在结点的指针域为空,称为尾标志;

为了运算方便,在单链表的开始结点之前附设一个类型相同的结点,称为头结点。

数据元素之间的逻辑关系用指针表示,单链表是顺序存取结构;

在实现插入和删除操作,无需移动结点,在将工作指针指向合适的位置后,仅需修改结点之间的链接关系。

优点:元素的存储单元是任意的,可连续也可不连续;不需要限定长度。

缺点:其查找时间复杂度为O(n);存放元素时需要另外开辟一个指针域的空间。

三、双链表(链接存储结构)

双向链表也叫双链表,是链表的一种,它的每个数据结点中都有两个指针,分别指向直接后继和直接前驱。

data为数据域,存放数据元素;prior为前驱指针域,存放该结点的前驱结点的地址;next为后继指针域,存放

该结点的后继结点的地址。是在单链表的每个结点中再设置一个指向其前驱结点的指针域。

优点:更方便数据的插入和删除。

缺点:增加了复杂程度。

四、循环链表(链接存储结构)

循环链表是另一种形式的链式存储结构,它的特点是表中最后一个结点的指针域指向头结点,整个链表形成一个环。

分类:(1)单循环链表——在单链表中,将终端结点的指针域NULL改为指向表头结点或开始结点即可。

            (2)多重链的循环链表——将表中结点链在多个环上。

循环链表中没有明显的尾端,需要格外注意循环条件,通常判断用作循环变量的工作指针是否等于某一指定指针(如头指针

或尾指针等),以判定工作指针是否周游了整个循环链表。

优点:无须增加存储量,仅对表的链接方式稍作改变,即可使得表处理更加方便灵活。

缺点:没有明显的尾端。

五、静态链表

静态链表是用数组来表示单链表,用数组元素的下标来模拟单链表的指针。对于线性链表,也可用一维数组来进行描述。

data域存放数据元素,next域存放该元素的后继元素所在数组下标。

avail是空闲链头指针,first是静态链表头指针,为了运算方便,通常静态链表也带头结点。

优点:在插入和删除操作时,只需要修改游标,不需要移动表中的元素。

缺点:没有解决连续存储分配带来的表长难以确定的问题。

六、间接寻址

间接寻址是将数组和指针结合起来的一种方法,它将数组中存储数据元素的单元改为存储指向该元素的指针。

优点:保持了顺序表随机存取的优点,同时改进了插入和删除操作的时间性能。

缺点:没有解决连续存储分配带来的表长难以确定的问题。

七、总结

本次对比分析,参照了书本以及实验册上的知识点。在做前几次实验时,有很多不太懂的地方,所以用的是同一个主函数。

通过查阅课本和网上的资料才能勉强地把它们写完。总结过后,了解了自己还不够掌握的部分,并会在之后的学习中熟悉它们,

对于相识却又不同的概念,比如顺序表和单链表;单链表和双链表;存储结构和存取结构等,要从根本去分析掌握。

脱离课本,不知道自己还能做到哪一步,但还是争取这么做吧。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: