14. 数据结构-Data Structures_哔哩哔哩_bilibili
1. 简介
在第 14 集中,视频主要介绍了数据结构在计算机科学中的重要性及其不同类型。视频从基本数据结构开始,如数组和字符串,然后介绍了更复杂的数据结构,如链表、队列、栈、树和图。通过具体示例和图示,深入讲解了这些数据结构的用途和特性。
2. 常见的数据结构
2.1 数组(Array)
数组是一种基础且常用的数据结构,用于存储一系列值,通过索引访问其中的元素。在大多数编程语言中,数组的索引从 0 开始,并使用方括号 [] 语法进行访问。例如,若要访问数组中第一个元素,可以使用 array[0]。
数组在内存中的存储是连续的,便于快速访问和修改。通过指定内存地址偏移量,计算机可以轻松地找到数组中的任何元素。
2.2 字符串(String)
字符串实际上是字符的数组,用于存储文本数据。字符串以引号括起来,并在内存中以 null 字符(即二进制的 0)结尾,表示字符串的结束,这可以防止函数将整个内存内容打印出来。
处理字符串的常见函数包括 strcat(连接两个字符串)等,增强了字符串的操作便捷性。
2.3 矩阵(Matrix)
矩阵可以视为数组的数组,适用于处理二维数据,如电子表格或屏幕像素。矩阵的维度可以随意扩展,形成三维、四维甚至更高维度的数据结构。
初始化矩阵时,需要指定两个索引才能访问具体的值,例如 matrix[2][1]。
2.4 结构体(Struct)
结构体允许将多个相关变量打包在一起,形成复合数据结构。例如,可以将一个银行账户号和余额存储在一个结构体中,方便一起操作。
2.5 链表(Linked List)
链表是一种灵活的数据结构,由节点(node)组成,每个节点包含一个值和一个指向下一个节点的指针。链表可以动态扩展和缩短,适用于需要频繁插入、删除操作的场景。核心概念包括:
- 节点(Node):包含值和指向下一个节点的指针。
- 循环链表(Circular Linked List):最后一个节点指向第一个节点。
- 非循环链表(Non-Circular Linked List):最后一个节点的指针为 0(
null)。
2.6 队列(Queue)
队列遵循先进先出(FIFO)原则,类似于排队机制。进队(enqueue)和出队(dequeue)操作用于管理队列中的元素。
2.7 栈(Stack)
栈遵循后进先出(LIFO)原则,类似于堆叠的盘子。元素的入栈(push)和出栈(pop)操作通过指针管理。
2.8 树(Tree)
树形结构用于表示具有层级关系的数据,如文件系统。关键概念包括:
- 根节点(Root):树的顶层节点。
- 子节点(Children):连接在其它节点下面的节点。
- 父节点(Parent Node):任何子节点的上级节点。
- 叶节点(Leaf Node):没有子节点的节点。
二叉树(Binary Tree)是每个节点最多有两个子节点的树结构。
2.9 图(Graph)
图比树更灵活,可以表示任意关系的数据结构,如城市之间的道路网络。图没有固定的根和叶节点,可以任意节点互相指向。
4. 总结
- 数组和字符串是基础且广泛使用的数据结构。
- 矩阵扩展了数组的应用,使处理多维数据更为简便。
- 结构体可以将多个相关变量封装在一起。
- 链表拥有动态扩展的能力,适用于频繁插入删除的场景。
- 队列和栈分别遵循 FIFO 和 LIFO 原则,常用于特定的算法和数据处理。
- 树用于表示层级结构的数据,二叉树是其特例。
- 图可以表示复杂的任意关系的数据结构。
选择合适的数据结构可以优化计算和存储,编程语言自带的库提供了丰富的预定义数据结构,极大地提升了开发效率。