顺序存储和链式存储 数据结构

14 篇文章 0 订阅
13 篇文章 2 订阅

顺序存储和链式存储

1. 再谈数组—顺序存储

我们在开始计算机课程没多久后就已经知晓了数组的概念,数组作为一个顺序储存方式数据结构为我们的程序设计带来了大量的便利,几乎任何的高级程序设计,算法设计都离不开数组的灵活使用,但是,数组最大的缺点就是我们的插入和删除时需要移动大量的元素,显然这需要消耗大量的时间。

以C语言数组插入一个元素为例,当我们需要在一个数组{1,2,3,4,5,6,7}的第1个元素后(即第2个元素)的位置插入一个’A’时

我们需要做的有,将第1个元素后的整体元素后移,形成新的数组{1,2,2,3,4,5,6,7},再将第2个元素位置的元素替换为我们所需要的元素’A’,最终形成我们的预期,一个简单的插入操作要进行那么多的步骤,显然不是很核算。

https://www.dotcpp.com/oj/ueditor/php/upload/image/20190618/1560862279691617.png

由示意图的操作,我们可以看出这样做的弊端有二

  • 其一:所需要移动的元素很多,浪费算力。
  • 其二:必须为数组开足够多的空间,否则有溢出风险。

2. 链表—链式存储

C语言使用中,由于以上出现的这些问题,我们链表的概念就应运而生,链表通过不连续的储存方式,以及指针的灵活使用,巧妙的简化了上诉的内容,同时链表是自适应内存大小的,也就是说无论我们设多大的数据,理论上都可以实现(当然不能超过你的机器承载),注意,有许多较晚的语言通过底层的方式解决了数组插入和删除时的时间浪费,如PYTHON。

链表的基本思维是,利用结构体的设置,额外开辟出一份内存空间去作指针,它总是指向下一个结点,一个个结点通过NEXT指针相互练习,串联,这就形成了我们的链表。

https://www.dotcpp.com/oj/ueditor/php/upload/image/20190618/1560862292645286.png

(图为单链表的一个结点结构)

其中DATA为自定义的数据类型,可以是简单的int型,也可以是复杂的struct结构体类型,而NEXT为指向下一个链表结点的指针,通过访问NEXT,可以引导我们去访问链表的下一个结点。

对于一连串的结点而言,就形成了我们的链表:

https://www.dotcpp.com/oj/ueditor/php/upload/image/20190618/1560862411132172.png

我们要进行上文所说的插入删除操作也就相当简单,只需要修改指针所指向的区域就可以了,不需要进行大量的数据移动操作。

https://www.dotcpp.com/oj/ueditor/php/upload/image/20190618/1560862444172854.png

相比起数组,链表解决了数组不方便移动,插入,删除元素的弊端,但相应的,链表付出了更加大的内存牺牲换来的这些功能的实现。

上文介绍的是单链表,接下来的本章节会依次给各位介绍:单链表,双链表,循环单链表,其功能不同但实现方式均大同小异。

https://www.dotcpp.com/oj/ueditor/php/upload/image/20190618/1560862480704970.jpg

(图示为接下来学习的几种链表的区别)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
数据结构中的顺序存储链式存储是两种常见的存储方式。顺序存储结构是指将数据元素按照其逻辑顺序依次存放在一片连续的内存空间中,通过元素的下标来访问数据。而链式存储结构则是通过节点之间的指针来建立数据元素之间的关系,每个节点包含数据和指向下一个节点的指针。 顺序存储结构的特点是可以随机访问元素,插入和删除元素的操作相对于链式存储结构来说比较复杂,因为需要移动其后面的元素。而链式存储结构的特点是插入和删除元素的操作相对较简单,但是访问元素需要通过遍历指针来查找。 顺序存储结构的优点是可以快速访问元素,适用于元素的数量已知且不会频繁变动的情况。而链式存储结构的优点是可以动态地插入和删除元素,适用于元素的数量未知或需要频繁变动的情况。 在比较顺序存储链式存储时,需要考虑到数据的访问效率和存储空间的利用率。顺序存储适用于对数据的随机访问较多的情况,而链式存储适用于对数据的插入和删除操作较多的情况。因此,选择使用哪种存储方式要根据具体的应用场景来决定。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [数据结构顺序存储链式存储](https://blog.csdn.net/HQ_LIN/article/details/110090228)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [顺序存储链式存储](https://blog.csdn.net/dreamwbt/article/details/53220125)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

芯片烧毁大师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值