总结:线性表的几种存储方式

一、顺序存储结构:顺序表

顺序表是用一段地址连续的存储单元依次存储线性表的数据元素。

其特点是:内存中地址连续,支持随机查找,按位查找算法的时间复杂度为O(1),按值查找的平均时间性能是O(n),插入删除操作的平均时间性能是O(n),适用于需要大量访问元素,而没有或少量增添或删除元素的程序。

顺序表的优点为:随机访问较快,创建简单。

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

二、连接存储结构:链表

1.单链表

单链表是用一组任意的存储单元存放线性表的元素。

其特点是:每一个结点有着数据域和指针域,指针域指向下一个结点。单链表是顺序存放,所以查询时的的平均时间性能是O(n),插入删除操作的平均时间性能是O(n),试用于需要大量进行增添或删除元素,而对访问元素无要求的程序(以下的循环链表、双链表同,不一一详述)

单链表的优点为:结构简单,存储空间小,能动态存储分配,插入和删除也无需移动元素。

缺点为:只能向前访问节点

2.循环链表

循环链表是在单链表的基础上,将终端结点的指针域由空指针改为指向头结点,使得整个单链表形成一个环,即为循环链表。

其特点是:基本操作的实现与单链表类似,但从链表的任一结点出发,可扫描到其他结点,增加了链表操作的灵活性。

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

   缺点为:只能在结点后插入或删除(若想找到某结点的前驱结点,需要遍历整个循环链表)。

3.双向链表

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

其特点是:从双向链表中的任意一个结电开始,都可以很方便地访问它的前驱结点和后继结点。

双向链表的优点为:可以在当前结点前面或者后面插入,可以删除前驱和后继(包括结点自己)

    缺点为:增加删除结点复杂了些许。

三、其他存储方法

1.静态链表

静态链表是用数组来表示单链表,用数组元素的下标来模拟单链表的指针。

其特点是:每个数组元素由两个域组成:data域存放数据元素,next域存放该元素的后继元素所在的数组下标,即“模拟链表”

静态链表的优点为:便于数据的插入和删除操作,只需要修改游标,不需要移动表中的元素,从而改进了插入和删除操作需要移动大量元素的缺点

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

2.间接寻址

间接寻址是将数组和指针结合起来的一种方法。

其特点是:将数组中存储数据元素的单元改为存储指向该元素的指针。

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

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

总结:

通过这次实验,发现自己对线性表的各种存储方式有了全面深入的了解,通过比较也发现了它们的异同,在什么情况下,用哪种存储结构,“适合自己的,才是做好的”。

这次实验花费了我不少时间,在做过顺序表和单链表实验的基础上,对循环链表和双链表并没有太大的问题,但是在静态链表和间接寻址两个实验中,我遇到了不少问题,部分是由于课本没有详细介绍,但大部分也是自己没能认真听讲,真正了解其内涵,不过,好在在通过网上搜索,自己也理解过来了,以后自己也会多敲敲,争取在完全不看课本,不通过网上的搜索,能自己高效地完成更多Project。

  • 8
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值