计算机速成课 第十四集 数据结构
1. 缘起
- 在处理的数据的时候,不想让数据像大学宿舍里一样混乱
- 希望的数据是结构化的,方便读取
- 因此,科学家发明了「数据结构」
2. 分类
-
数组
- 名称:也叫列表,或向量
- 特点:数组的值一个一个连续存在内存里
- 下标:为了拿到数组中的某个值,我们需要指定一个下标
- 库函数
- 排序函数:只要传入数组,就会返回排序后的数组,不需要写排序算法
-
字符串
- 其实就是字母、数字、标点符号等,组成的数组
-
矩阵
- 数组的数组
-
结构体
- 概念:多个变量打包在一起
- 特点:可以创造更复杂的数据结构,消除这些限制
- 举例
- 节点:存一个变量,一个指针
- 指针:是一种特殊变量,指向一个内存地址,因此得名
-
链表
- 特点1:是一种灵活的数据结构,能存很多个节点
- 特点2:很容易重新排序,两端缩减,分割,倒序等
- 特点3:很多复杂数据结构都用链表,最出名的是队列和栈
- 灵活性是通过每个节点 指向 下一个节点实现的
- 循环链表:最后一个结点指向头结点,形成一个环
- 当程序员使用链表时,很少看指针具体指向哪里,而是用链表的抽象模型,更容易看懂
-
队列
- 像邮局排队,谁先来就排前面,这叫先进先出(FIFO)
-
栈
- 后进先出(LIFO)
- 举例:松饼
-
树
- 最高的节点叫「根节点」
- 根节点下的所有节点,都叫「子节点」
- 任何子节点的直属上层节点,叫「母节点」
- 没有任何「子节点」的节点,也就是「树」结束的地方,叫「叶节点」
- 重要性质:「根」到「叶」是单向的
-
图
- 特点1:数据随意连接,包括循环
- 特点2:可以用有多个指针的节点表示,因此没有「根」、「叶」、「子节点」、「父节点」这些概念,可以随意指向
总结
- 不同数据结构适用于不同场景,选择正确数据结构会让工作更简单,所以花时间考虑用什么数据结构是值得的
- 大多数编程语言自带了预先做好的数据结构,程序员不同浪费时间从零写,时间可以花在更有趣的事情上
- C++ 有「标准模板库」
- Java 有 「Java 类库」