中年|C/C++编程笔记:同样是数据类型,链表对比数组?哪个更香?
说起链表 , 第一反应:链表是一种数据类型!它可以用来存储同种类型多个批量数据 。
本文插图
有了这种认知 , 很容易去联想到数组 , 它也是一种数据类型 , 也可以用来存储同种类型的批量数据 。 初学者往往对数组的印象比较好 , 比如想要存一批整数 , 就可以定义一个一维整形数组 , 用数组存储 , 简单直观且方便 。
那为什么要引入链表呢?
这里主要的原因是数组它是有缺点的:首先 , 数组是采用静态分配的方式 。
什么意思呢?就是说你想在程序中用数组 , 就要先定义数组 , 写一个说明语句放在执行语句之前 。 我们的变量都是先定义后使用的嘛 , 在这个说明语句的部分 , 数组的长度已经被判死刑了 。
在后续操作中 , 我们既无法对已分配的存储单元进行扩充或者更变 , 也不能通过编程的方式对没有充分利用的资源进行回收 , 这就是所谓的静态分配 。
本文插图
有同学可能有疑问 , 静态就静态呗 , 有什么问题吗?问题在于 , 在某些情况下 , 你无法确定数据的大致规模 , 或者数据规模需要针对不同用户进行相应的调整 。
比如说 , 对于一个学生管理系统 , 采用数组的方式存储数据的话:如果用户是一个班级 , 100个单元就够用;对于一个院系 , 可能要1000个单元;对于几个院系 , 可能要上万个单元 。
那么你想让自己的系统能够同时满足这些用户的需求 , 就理应采用最大的规模 , 也就是应该在说明语句中把数组的规模做到一万 。 而只要定义了变量 , 系统就会分配存储单元 。
实际应用中 , 哪怕只用到其中的1个单元 , 系统也会分配一万的单元 , 多余的单元程序不会使用到 , 别的变量也没办法用 , 属于典型的占着什么不什么 。
数组的另外一个缺陷是:必须使用连续的内存单元 。 对于一个领着100个游客住旅馆的导游 , 如果采用数组方式住店 , 假如旅店的空房间数量远远多于100个 , 但任何一个地方都没有连续的100个房间 。
那就比较尴尬了 , 老板娘只好提示你系统内存空间不够 , 不让你住店 , 也不让你的程序执行 。
那么将来我们引入链表就可以巧妙地解决这两个问题:首先我们的链表不是在执行语句运行前提前定义的 , 而是可以按照用户的需求动态分配 , 更加灵活高效;其次 , 采用链表方式也需要内存单元 , 但是不再需要连续的内存 。
那讨论到这里的话:链表这么完美 , 数组全是缺点 , 以后全部用链表不就好了吗?
本文插图
但是链表也有缺点 。 比如说它定义形式更加复杂 , 给编程者有一定的学习门槛;无法直接定位链表中某一个元素 , 而只能通过前导依次遍历会降低访问效率等等 。
在开发实践中 , 到底应该使用哪种数据类型 , 应该根据实际需要灵活变动 , 不能而在某一种方式上钻牛角尖 。
对于更多的开发人员而言 , 我们对自己的定位应该是语言的使用者 , 而非语言的研究者 。 所以编程实践中 , 如何采用合理、高效有用的方式才是我们真正需要考虑的东西 , 而非去一味追求刁钻的技巧技法 , 千万不要陷入“能力的怪圈” 。
感谢阅读 , 学习使人强大 。
自学C/C++编程难度很大 , 如果你想更快提升自己的编程能力和编写项目的水平 , 欢迎一起共同成长!
C语言C++编程学习交流圈子 , 关注+私信【C/C++编程】微信公众号:C语言编程学习基地
有一些源码和资料分享 , 欢迎转行也学习编程的伙伴 , 和大家一起交流成长会比自己琢磨更快哦!
推荐阅读
- 中年|北斗“一张网”可实现全天候、高精度、自主可控服务
- 中年|Python编程语言有什么独特的优势呢?
- 中年|谈一谈我的十年机械工作经历
- 中年|弹无虚发的背后,国产弹药质量把关人,精密机床都要自叹不如
- 中年|宿迁深圳招商再结硕果,签约项目19个,协议总投资158亿元
- 蓝橡树|牛娃爸爸分享: 孩子如何通过学习编程, 激活大脑, 提升成绩, 逆袭名校?
- 中年|苹果:已终止Epic Games开发者账号
- 中年|圆满的结局!苹果微信之间不用再二选一,美国政府还是做出让步
- 中年|国家能源集团成功研发矿用卡车能耗制动开关预警装置
- |风变编程荣获第九届中国财经峰会「2020教育行业影响力品牌」