【C/C++编程入门学习】同样是数据类型,链表对比数组?哪一个更香?
说起链表,第一反应:链表是一种数据类型!它可以用来存储同种类型多个批量数据。

有了这种认知,很容易去联想到数组,它也是一种数据类型,也可以用来存储同种类型的批量数据。初学者往往对数组的印象比较好,比如想要存一批整数,就可以定义一个一维整形数组,用数组存储,简单直观且方便。
那为什么要引入链表呢?
这里主要的原因是数组它是有缺点的:首先,数组是采用静态分配的方式。
什么意思呢?就是说你想在程序中用数组,就要先定义数组,写一个说明语句放在执行语句之前。我们的变量都是先定义后使用的嘛,在这个说明语句的部分,数组的长度已经被判死刑了。
在后续操作中,我们既无法对已分配的存储单元进行扩充或者更变,也不能通过编程的方式对没有充分利用的资源进行回收,这就是所谓的静态分配。

有同学可能有疑问,静态就静态呗,有什么问题吗?问题在于,在某些情况下,你无法确定数据的大致规模,或者数据规模需要针对不同用户进行相应的调整。
比如说,对于一个学生管理系统,采用数组的方式存储数据的话:如果用户是一个班级,100个单元就够用;对于一个院系,可能要1000个单元;对于几个院系,可能要上万个单元。
那么你想让自己的系统能够同时满足这些用户的需求,就理应采用最大的规模,也就是应该在说明语句中把数组的规模做到一万。而只要定义了变量,系统就会分配存储单元。
实际应用中,哪怕只用到其中的1个单元,系统也会分配一万的单元,多余的单元程序不会使用到,别的变量也没办法用,属于典型的占着什么不什么。

数组的另外一个缺陷是:必须使用连续的内存单元。对于一个领着100个游客住旅馆的导游,如果采用数组方式住店,假如旅店的空房间数量远远多于100个,但任何一个地方都没有连续的100个房间。
那就比较尴尬了,老板娘只好提示你系统内存空间不够,不让你住店,也不让你的程序执行。
那么将来我们引入链表就可以巧妙地解决这两个问题:首先我们的链表不是在执行语句运行前提前定义的,而是可以按照用户的需求动态分配,更加灵活高效;其次,采用链表方式也需要内存单元,但是不再需要连续的内存。
那讨论到这里的话:链表这么完美,数组全是缺点,以后全部用链表不就好了吗?

但是链表也有缺点。比如说它定义形式更加复杂,给编程者有一定的学习门槛;无法直接定位链表中某一个元素,而只能通过前导依次遍历会降低访问效率等等。
在开发实践中,到底应该使用哪种数据类型,应该根据实际需要灵活变动,不能而在某一种方式上钻牛角尖。
对于更多的开发人员而言,我们对自己的定位应该是语言的使用者,而非语言的研究者。所以编程实践中,如何采用合理、高效有用的方式才是我们真正需要考虑的东西,而非去一味追求刁钻的技巧技法,千万不要陷入“能力的怪圈”。
看到这里你是不是又学到了很多新知识呢~
如果你很想学编程,小编推荐我的C语言/C++编程学习基地【点击进入】!
都是学编程小伙伴们,带你入个门还是简简单单啦,一起学习,一起加油~
还有许多学习资料和视频,相信你会喜欢的!
涉及:游戏开发、常用软件开发、编程基础知识、课程设计、黑客等等......


【C/C++编程入门学习】同样是数据类型,链表对比数组?哪一个更香?的更多相关文章
- C、C++、Java到Python,编程入门学习什么语言好?
摘要:回顾编程语言几十年来的兴衰起伏,似乎也折射了整个信息产业的变迁消亡,想要在技术的洪流里激流勇进,找准并学精一两门编程语言更加显得至关重要. 最近,TIOBE更新了7月的编程语言榜单,常年霸榜的C ...
- OPENSSL编程入门学习
相关学习资料 http://bbs.pediy.com/showthread.php?t=92649 https://www.openssl.org https://www.google.com.hk ...
- cg语言学习&&阳春白雪GPU编程入门学习
虽然所知甚少,但康大的<GPU编程与Cg编程之阳春白雪下里巴人>确实带我入了shader的门,在里面我第一次清晰地知道了“语义”的意思,非常感谢. 入门shader,我觉得可以先读3本书: ...
- 【C/C++编程入门学习】C语言结构体硬核玩法分享,一切皆是数据!
前言 对于结构体的应用太多了,今天这篇文章我主要为大家总结平时关于结构体的一些独特硬核小技巧,对于结构体更多优秀的编程表现,如果你对结构体的基础知识还不具备的话得回头看一下专栏教程或者自己找本书籍学习 ...
- Lua编程入门-学习笔记2
第6章 深入函数 函数是一种“第一类值(First-Class Value)”,他们具有特定的词法域(lexical scoping) 将表达式“function(x) <body> en ...
- Lua编程入门-学习笔记1
第1章:起点 Chunks: 语句块 每个语句结尾的分号是可选的,如果同一行有多个语句最好使用分号分隔: dofile("lib1.lua") -- 执行lua文件 全局变量:局 ...
- opencv3 编程入门学习笔记(一): 基本函数介绍
滤波 blur (均值滤波) 均值滤波是典型的线性滤波算法, 主要方法为领域平均法(即用一片图像区域的各个像素的平均值来代替原图像中的各个像素值) 缺点: 不能很好的保护图像细节, 在图像去噪的同时也 ...
- 大牛整理最全Python零基础入门学习资料
大牛整理最全Python零基础入门学习资料 发布时间:『 2017-11-12 11:56 』 帖子类别:『人工智能』 阅读次数:3504 (本文『大牛整理最全Python零基础入门学习资料 ...
- C语言编程入门之--第四章C语言基本数据类型
导读:C语言程序中经常涉及一些数学计算,所以要熟悉其基本的数据类型.数据类型学习起来比较枯燥,不过结合之前的内存概念,以及本节的字节概念,相信数据类型也就不难理解了.本章从二进制的基本概念开始,然 ...
随机推荐
- Linux:文件和用目录权限基础
首先,用ls -i 查看文件的信息: 红框框起来的部分:-rw-r--r-- 一共是10位,第一位表示文件类型,-表示文件,d表示文件夹/目录:后面9位则表示权限 其中前三位是该文件/目录所属者的权限 ...
- 藏在Java数组的背后,你可能忽略的知识点
目录 引言 概念 区别于C/C++数组 区别于容器 数组特性 随机访问 Java数组与内存 解惑 数组的本质 Java中的数组是对象吗? Java中数组的类型 Java中数组的继承关系 参考资料 引言 ...
- VSCode注册关联自定义类型文件
打开你要注册的文件类型文件[本文中用 ".txt"到".lua"演示] 在VSCode窗口右下角有当前文件类型"Plain Text" 是可 ...
- [Binder深入学习二]Binder驱动——基础数据结构二
Userspace和KernelSpace进行交互时,大部分命令是通过 ioctl 实现的,在这个过程中,最重要的一个便是 BINDER_WRITE_READ 命令了. #define BINDER_ ...
- 小白的springboot之路(十七)、阿里云OSS 的使用
0-前言 项目中,文件服务必不可少,常用的有各云服务商的OSS服务(如阿里云OSS,腾讯云OSS,七牛云).自建(fastDFS.minio): 推荐:如果用云服务的话,阿里云OSS很方便,如果自建的 ...
- Linux环境变量总结 转
转自https://www.jianshu.com/p/ac2bc0ad3d74 Linux是一个多用户多任务的操作系统,可以在Linux中为不同的用户设置不同的运行环境,具体做法是设置不同用户的环境 ...
- Java审计之命令执行篇
Java审计之命令执行篇 0x00 前言 在Java中能执行命令的类其实并不多,不像php那样各种的命令执行函数.在Java中目前所知的能执行命令的类也就两种,分别是Runtime和 ProcessB ...
- Docker:常见命令
Docker常见命令(持续更新中): 说明 命令 截图 1 查看Docker版本 Docker -v 2 查看镜像 Docker image ls 3 查看容器 Docker conta ...
- 手把手教你在容器服务 TKE 上使用 LB 直通 Pod
什么是 LB 直通 Pod ? Kubernetes 官方提供了 NodePort 类型的 Service,即给所有节点开一个相同端口用于暴露这个 Service,大多云上 LoadBalancer ...
- Combine 框架,从0到1 —— 5.Combine 提供的发布者(Publishers)
本文首发于 Ficow Shen's Blog,原文地址: Combine 框架,从0到1 -- 5.Combine 提供的发布者(Publishers). 内容概览 前言 Just Future D ...