笔记:数据结构(C语言版)第一章知识点详细归纳
1. 数据结构的基本概念数据是信息的载体能够被计算机识别、存储和处理的符号集合。可以是数字、字符、图像、声音等。数据元素是数据的基本单位通常作为一个整体进行处理。例如在学生信息表中一个学生的所有信息学号、姓名、成绩等构成一个数据元素。数据项是构成数据元素的最小单位。例如学生信息中的“学号”或“姓名”是一个数据项。数据对象是具有相同性质的数据元素的集合。例如所有学生的信息构成一个数据对象。数据结构是数据元素之间的关系及其操作的集合。数据结构是指按⼀定的逻辑结构组成的⼀批数据按某种存储结构将这批数据存储于计算机中并在这批数 据上定义了⼀个运算集合。数据结构包括以下三个方面逻辑结构数据元素之间的抽象关系。存储结构数据在计算机中的存储方式。运算对数据元素的操作如插入、删除、查找等。2. 数据的逻辑结构数据的逻辑结构是从问题抽象出来的模型描述数据元素之间的逻辑关系与数据的存储无关。逻辑结构可以分为两大类线性结构和非线性结构。具体来说逻辑结构包括以下四种基本结构2.1 集合结构定义数据元素之间除了“属于同一集合”外没有任何其他关系。特点元素之间是独立的没有特定的逻辑关系。集合结构的操作主要包括并集、交集、差集等。示例数学中的集合如{1, 2, 3, 4}。2.2 线性结构定义数据元素之间存在一对一的线性关系即除了第一个和最后一个元素外每个元素都有唯一的前驱和后继。特点元素之间是顺序关系形成一条“线”。常见的线性结构包括数组、链表、栈、队列、串等。示例数组元素在内存中连续存储通过下标访问。链表元素通过指针链接存储空间可以不连续。2.3 树形结构定义数据元素之间存在一对多的层次关系形成一个树状结构。特点元素之间是层次关系每个元素有一个父节点和零个或多个子节点。常见的树形结构包括二叉树、B树、堆、哈夫曼树等。示例二叉树每个节点最多有两个子节点。文件系统文件夹和文件之间的层次关系。2.4 图状结构定义数据元素之间存在多对多的任意关系形成一个网状结构。特点元素之间的关系可以是任意的没有严格的层次或顺序。常见的图状结构包括有向图、无向图、带权图等。示例社交网络用户之间的关系可以是任意的。交通网络城市之间的道路连接。2.5.1 线性结构定义线性结构元素之间是一对一的关系,在线性结构中只有一个开始结点和一个终端结点其他的每一个结点有且仅有一个直接前驱和一个直接后继。线性结构是指数据元素之间存在一对一的关系即数据元素按顺序排列形成一个线性序列。每个元素除了第一个和最后一个都有且仅有一个前驱和一个后继。特点顺序性元素按顺序排列逻辑上是一个接一个的。唯一性第一个元素没有前驱最后一个元素没有后继。其他元素有且仅有一个前驱和一个后继。简单性结构简单易于实现和操作。常见类型线性表最基本的线性结构包括顺序表和链表。例如数组、单链表、双向链表。栈Stack后进先出LIFO的结构只能在栈顶进行插入和删除操作。队列Queue先进先出FIFO的结构队尾插入队头删除。字符串String由字符组成的线性序列。应用场景线性表存储和处理线性数据如学生成绩表。栈函数调用栈、表达式求值、括号匹配。队列任务调度、缓冲区管理、广度优先搜索BFS。2.5.2 非线性结构定义非线性结构是指数据元素之间存在一对多或多对多的关系是更复杂的层次或网状结构。非线性结构是指数据元素之间存在一对多或多对多的关系即元素之间的关系不再是简单的线性顺序而是更复杂的层次或网状结构。特点复杂性元素之间的关系复杂可能有多重关联。灵活性可以表示更复杂的数据关系。多样性有多种不同的组织形式如树、图等。常见类型树Tree层次结构每个元素节点有且仅有一个父节点但可以有多个子节点。例如二叉树、二叉搜索树、堆、哈夫曼树。图Graph网状结构元素顶点之间可以有多对多的关系。例如有向图、无向图、加权图。集合Set元素之间没有明显的顺序关系通常用于存储唯一值。多维数组数据元素在多维空间中的排列例如矩阵。应用场景树文件系统、数据库索引、组织架构。图社交网络、地图导航、网络拓扑。集合数据去重、字典、过滤唯一值。对比总结特性线性结构非线性结构数据关系一对一一对多或多对多结构复杂度简单复杂常见类型线性表、栈、队列、字符串树、图、集合、多维数组应用场景线性数据处理、简单任务调度复杂数据关系、层次或网状结构操作复杂度通常较低通常较高3. 数据的存储结构存储结构是逻辑结构在计算机中的实现方式描述了数据元素及其关系在内存中的存储形式。常见的存储结构包括3.1 顺序存储定义数据元素存储在连续的存储单元中通过元素的相对位置来表示逻辑关系。特点存储密度高支持随机访问。插入和删除操作效率低需要移动大量元素。示例数组。3.2 链式存储定义通过指针将数据元素链接起来元素在内存中可以不连续存储。特点插入和删除操作效率高只需修改指针。存储密度较低不支持随机访问。示例链表。3.3 索引存储定义通过索引表存储数据元素的地址索引表中的每一项指向一个数据元素。特点查找效率高但需要额外的存储空间。适用于大数据量的查找操作。示例数据库索引。3.4 散列存储定义通过散列函数计算数据元素的存储位置将数据元素直接存储在计算出的地址中。特点查找效率高但可能发生冲突。适用于快速查找和插入的场景。示例哈希表。3.5.1存储密度高 / 存储密度大定义存储密度高或存储密度大表示在存储结构中数据元素占用的实际存储空间与总存储空间的比率较高即存储空间的利用率高。特点数据元素占用的存储空间较多而额外的开销如指针、索引等较少。适合需要高效利用内存的场景。示例数组数组的元素在内存中连续存储没有额外的空间开销存储密度高。顺序存储结构数据元素在内存中按顺序存放存储密度大。3.5.2存储密度低 / 存储密度小定义存储密度低或存储密度小表示在存储结构中数据元素占用的实际存储空间与总存储空间的比率较低即存储空间的利用率低。特点数据元素占用的存储空间较少而额外的开销如指针、索引等较多。适合需要动态插入和删除操作的场景。示例链表链表的每个节点除了存储数据元素外还需要额外的空间存储指针存储密度低。链式存储结构数据元素通过指针链接存储密度小。3.5.3对应关系总结术语含义特点示例存储密度高 / 存储密度大存储空间利用率高数据元素占用空间多额外开销少数组、顺序存储存储密度低 / 存储密度小存储空间利用率低数据元素占用空间少额外开销多链表、链式存储3.5.4应用场景存储密度高 / 存储密度大适用于需要高效利用内存的场景如数组、顺序存储结构。存储密度低 / 存储密度小适用于需要动态插入和删除操作的场景如链表、链式存储结构。3.6 存储结构与逻辑结构的关系存储结构是逻辑结构在计算机中的实现方式不同的逻辑结构可以选择不同的存储结构。例如线性结构可以选择顺序存储数组或链式存储链表树可以选择链式存储二叉树或顺序存储堆。4. 数据结构的运算数据结构的运算是对数据元素的操作常见的运算包括插入在数据结构中添加新元素。删除从数据结构中移除元素。查找在数据结构中寻找特定元素。更新修改数据结构中的元素。排序按特定顺序排列数据结构中的元素。运算的效率取决于数据结构的逻辑结构和存储结构。例如在数组中查找元素的时间复杂度为O(1)而在链表中查找元素的时间复杂度为O(n)。5. 算法与算法分析算法解决特定问题的有限步骤。算法必须满足以下特性有穷性算法必须在有限的步骤内结束。确定性算法的每一步必须有明确的定义。可行性算法的每一步都必须是可行的。输入算法有零个或多个输入。输出算法有一个或多个输出。算法的时间复杂度衡量算法执行时间的增长率常用大O表示法。例如O(1)表示常数时间复杂度O(n)表示线性时间复杂度。算法的空间复杂度衡量算法所需存储空间的增长率同样使用大O表示法。6. 评判算法的好坏评判算法的好坏通常从以下几个方面进行6.1 正确性定义算法能够正确地解决问题产生预期的输出。重要性正确性是算法最基本的要求一个错误的算法无论效率多高都没有意义。6.2 时间效率定义算法执行所需的时间通常用时间复杂度来衡量。重要性时间效率直接影响算法的运行速度尤其是在处理大规模数据时。6.3 空间效率定义算法执行所需的存储空间通常用空间复杂度来衡量。重要性空间效率影响算法的内存占用特别是在内存有限的系统中。6.4 可读性定义算法的代码是否易于理解和维护。重要性可读性高的算法更易于调试、修改和扩展。6.5 健壮性定义算法在输入非法数据或异常情况下是否能够正确处理。重要性健壮性强的算法能够在各种异常情况下保持稳定运行。7. 综合应用结合习题中的内容以下是一些重要的知识点和示例7.1 时间复杂度分析示例1Cfor(i1;in;i)for(j1;ji;j)xx1;分析内循环的执行次数与外循环有关总执行次数为123…n n(n1)/2时间复杂度为O(n²)。示例2C i 1; while(i n) i i * 3;分析i的值按指数增长时间复杂度为O(log₃n)。7.2 逻辑结构与存储结构的应用线性结构适用于顺序处理的问题如数组、链表、栈、队列等。非线性结构适用于层次化或复杂关系的问题如树、图等。总结第一章介绍了数据结构的基本概念、逻辑结构、存储结构、运算以及算法分析。逻辑结构包括集合结构、线性结构、树形结构和图状结构存储结构包括顺序存储、链式存储、索引存储和散列存储。评判算法的好坏通常从正确性、时间效率、空间效率、可读性和健壮性等方面进行。掌握这些知识点是学习更复杂数据结构和算法的基础。