### 数据结构笔记知识点详解 #### 一、静态链表与顺序表、链表的比较 **静态链表**是利用一维数组的形式来模拟链表的一种数据结构。它结合了数组和链表的优点,能够有效地解决传统链表空间浪费的问题。 - **静态链表的特点**: - 使用一维数组来存储链表的节点。 - 数组中的每个元素不仅存储数据,还存储一个指向下个节点位置的信息。 - 与动态链表相比,静态链表预先分配内存,因此不会出现内存碎片问题。 **顺序表与链表的比较**: - **顺序表**: - 数据元素在内存中是连续存放的。 - 插入和删除操作需要移动大量的元素,效率较低。 - 查找速度快,因为可以通过下标直接访问任意位置的元素。 - **链表**: - 数据元素在内存中不一定连续存放,而是通过指针链接起来。 - 插入和删除操作不需要移动元素,只需修改指针即可,效率较高。 - 查找速度较慢,需要从头节点开始逐个遍历。 **顺序表的插入元素算法**: 1. 查找插入位置。 2. 如果数组未满,则将插入位置之后的所有元素向后移动一位。 3. 将新元素插入空出的位置。 4. 更新数组长度。 **顺序表的删除操作**: 1. 查找要删除元素的位置。 2. 将被删除元素之后的所有元素向前移动一位。 3. 更新数组长度。 #### 二、单链表的构建 - **尾插法创建单链表**: - 遍历输入数据。 - 每个数据都作为新节点加入到链表的尾部。 - 这种方法适用于已知数据集合的情况。 - **头插法建立单链表**: - 每个数据都作为新节点加入到链表的头部。 - 这种方法适用于实时添加数据的情况。 - **尾插法建立双链表**: - 类似于单链表的尾插法,但需要同时维护前后指针。 #### 三、栈与队列 - **顺序栈的出入栈算法**: - 入栈:如果栈未满,则在栈顶位置插入元素。 - 出栈:如果栈非空,则移除栈顶元素。 - **栈的应用**: - 用于程序调用的管理。 - 表达式的转换和求值。 - 括号匹配等问题。 - **循环队列**: - 循环队列解决了普通队列的“假溢出”问题。 - **队尾指针rear**指向刚进队的元素位置。 - **队首指针front**指向刚出队的元素位置。 - 当rear和front都指向数组末端时,即使队列中还有空闲位置也无法继续入队。 #### 四、排序算法 - **插入排序**: - **基本思想**:将一个记录插入到已排序好的有序表中,从而得到一个新的、记录数增1的有序表。 - **直接插入排序**:对于未排序数据,在已排序序列中从后向前扫描。 - **折半插入排序**:使用折半查找确定插入位置。 - **表插入排序**:类似于直接插入排序,但使用链表作为存储结构。 - **希尔排序**: - **基本思想**:不是将待排序元素一次性进行排序,而是将待排序元素分组,每组采用插入排序的方式排序。 - **交换类排序**: - **冒泡排序**:重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。 - **快速排序**:通过一趟排序将待排序记录分隔成独立的两部分,其中一部分记录的关键字均比另一部分的关键字小,然后分别对这两部分记录继续进行排序,以达到整个序列有序。 - **选择类排序**: - **简单选择排序**:每趟从待排序记录中选出最小(或最大)的一个记录,顺序放在已排序的记录序列的最后。 - **归并排序**: - **2-路归并排序**:采用分治策略,将数组分成两半,分别对这两半进行排序,然后将两个已排序的部分合并。 #### 五、稀疏矩阵和广义表 - **稀疏矩阵**: - **三元组表表示法**: - **Row**:非零元素所在的行值。 - **Col**:非零元素所在的列值。 - **Value**:非零元素的值。 - **快速转置算法**:使用两个辅助数组`num[]`和`position[]`来加速转置过程。 - **广义表**: - **第一种存储结构**:每个节点包含三个域,用于存储原子或子表。 - **第二种存储结构**:同样使用三个域的节点结构,但具体实现细节可能有所不同。 #### 六、二叉树 - **线索二叉树**: - 是一种特殊的二叉树结构,通过添加线索使得遍历操作更高效。 - **中序线索化算法**:将二叉树的空指针指向其前驱或后继节点。 - **图**: - 图是一种非线性的数据结构,用于表示对象之间的关系。 #### 七、查找 - **基于线性表的查找**: - **折半查找**:仅适用于有序线性表,通过不断将搜索区间减半来提高查找效率。 - **基于树的查找法**: - **二叉排序树(二叉查找树)**:每个节点的左子树只包含小于该节点键值的节点;右子树只包含大于该节点键值的节点。 - **二叉排序树的插入算法**:从根节点开始,根据比较结果决定插入位置。 - **在二叉排序树中删除节点**:需要考虑三种情况:无子节点、有一个子节点、有两个子节点。 - **B_树**: - **m路查找树**:每个节点最多有m棵子树。 - **性质**: - 每个节点最多有m棵子树。 - 根结点至少有两棵子树。 - 除根节点之外的所有非叶子节点至少有\[m/2\]棵子树。 - 所有叶子结点出现在同一层上。 - 子树也是m路查找树。 - **计算式查找法——哈希法**: - **处理冲突的方法**: - **开放定址法**:当发生冲突时,根据一定的规律寻找下一个可用位置。 - **线性探测再散列**:每次冲突后,顺序检查下一个位置是否可用。 以上内容涵盖了数据结构的基础知识点,包括静态链表、各种排序算法、栈与队列、稀疏矩阵、广义表以及查找方法等。这些概念和技术是计算机科学领域不可或缺的基础知识,对于理解和设计高效的算法有着重要意义。
剩余27页未读,继续阅读
- 粉丝: 0
- 资源: 2
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 【java毕业设计】幼儿园管理系统源码(springboot+vue+mysql+说明文档+LW).zip
- 基于codesys 平台编码器脉冲信号计算里程
- 【java毕业设计】springboot构建的金雁在线考试系统(springboot+vue+mysql+说明文档).zip
- 总裁主题CEOMAX-pro7.6免授权版本
- 【java毕业设计】游戏分享网站源码(springboot+vue+mysql+说明文档+LW).zip
- springboot艺术作品交流论坛(附源码+数据库)96564
- 【java毕业设计】springboot的渔具管理系统(springboot+vue+mysql+说明文档).zip
- TotalCMDPortable
- 【java毕业设计】影城管理系统源码(springboot+vue+mysql+说明文档+LW).zip
- 基于PHP的网上选课系统(主要功能:学生信息管理、课程管理、教师管理、学生选课管理等)+项目源码+文档说明