
数据结构
陆小果不会写代码
备考408大学牲
学习能力不强,但是会督促自己。发博客是为了自己以后方便复习,也希望能帮助一些有需要的研友
一起加油奥里给
展开
-
Dijkstra算法
Dijkstra算法,这就像在城市的夜生活中找到最快捷的路线一样,既实用又充满策略!这个算法是由荷兰计算机科学家Edsger Dijkstra发明的,用来找到图中一个节点到其他所有节点的最短路径。它特别适合用在那些包含了权重的图上,比如路线的距离或者花费时间。Dijkstra算法像是城市中的导航系统,总能找到从一点到另一点的最快路径。但记得,老兄,这个算法假设所有的权重都是正值,所以如果你的图中包含负权重的边,那么你可能需要考虑其他算法,比如贝尔曼-福特算法。原创 2024-05-10 12:06:55 · 205 阅读 · 0 评论 -
双向冒泡算法(C语言版)
放在函数中间是为了在正向冒泡和反向冒泡之间进行判断,如果在正向冒泡中已经确定数组有序,则可以直接跳出循环,无需继续执行后续的反向冒泡过程。被放在函数中间的原因是为了在正向冒泡和反向冒泡之间进行判断。原创 2024-04-11 18:46:10 · 484 阅读 · 0 评论 -
二分查找失败 元素插入
循环结束后仍然存在,并且其作用范围延伸到循环结束后的代码块。在许多编程语言中,包括 C、C++、Java 等,循环变量(比如。循环执行完毕后执行的。这两个语句不是分开的,而是在不同的位置。仍然存在,并且其值是循环结束时的值,即。在循环结束后继续存在,你可以在。循环内部执行的,因此它属于。的值会保留为循环结束时的值。的作用范围就会被限制在。因此,在你的代码片段中,原创 2024-03-18 12:14:41 · 315 阅读 · 0 评论 -
for循环执行到最后 还会执行到最后一次吗(刚刚不满足条件时)
当循环执行到 i 等于 high + 1 时,它会继续执行一次循环体(以i=high+1的条件执行),然后 i 会减一,变为 high,然后循环结束(for循环内部不再执行了因为不满足i>high的条件)。详细分析:当 i 是 n-1 时,循环开始。循环条件是 i > high。循环体内的代码被执行。i-- 操作执行,i 减一。i 的值检查是否大于 high。如果是,继续循环,回到步骤 2。如果不是,循环结束。当 i 的值等于 high + 1 时,循环体内的代码仍然会被执行一次,然后 i-原创 2024-03-18 12:13:56 · 626 阅读 · 0 评论 -
++i 和i++的区别
都是递增操作符,但它们之间有一个很重要的区别。的区别在于它们递增操作的时机不同,的值赋给表达式,然后再对。原创 2024-03-17 16:17:38 · 279 阅读 · 0 评论 -
考研408 2011年 第42题 (数据结构——队列)
【代码】考研408 2011年 第42题 (数据结构——队列)原创 2024-03-14 19:04:27 · 271 阅读 · 0 评论 -
二叉排序树(非递归15.5)
【代码】二叉排序树(非递归15.5)原创 2024-03-11 21:02:27 · 139 阅读 · 0 评论 -
折半查找原理(15.4)
【代码】折半查找原理(15.4)原创 2024-03-10 14:45:47 · 137 阅读 · 0 评论 -
顺序表和链表的区别
顺序表和链表是两种常见的数据结构,它们在存储和组织数据上有一些关键的区别。存储方式:顺序表: 使用数组(或列表)来存储元素,元素在内存中是连续存储的。这意味着通过索引可以直接访问任何元素。链表: 使用节点来存储元素,每个节点包含数据和一个指向下一个节点的指针。节点在内存中可以是分散的,不要求连续存储。插入和删除操作:顺序表: 在顺序表中,插入和删除元素可能需要移动其他元素,以保持顺序表的连续性。这可能导致较大的时间复杂度,尤其是在插入或删除元素的中间位置时。链表: 插入和删除操作在链表中更为高原创 2024-03-10 09:22:41 · 373 阅读 · 0 评论 -
顺序查找原理 及详解(15.3)
【代码】顺序查找原理 及详解(15.3)原创 2024-03-09 11:49:45 · 138 阅读 · 0 评论 -
考研408 2014年第41题(二叉树带权路径长度【WPL】)
【代码】考研408 2014年第41题(二叉树带权路径长度【WPL】)原创 2024-03-09 10:38:40 · 370 阅读 · 0 评论 -
二叉树的层序遍历 (层次遍历 广度优先遍历)
【代码】二叉树的层序遍历 (层次遍历 广度优先遍历)原创 2024-03-08 08:23:10 · 146 阅读 · 0 评论 -
二叉树的层序遍历 (层次遍历 广度优先遍历)(14.7版)
【代码】二叉树的层序遍历 (层次遍历 广度优先遍历)(14.7版)原创 2024-03-08 08:22:54 · 162 阅读 · 0 评论 -
二叉树层次建树中的 双结构体(树与辅助队列)
结构体内部的指针用于在树或队列中建立节点之间的关系,从而促使树的构建和遍历。这个成员变量的作用是将辅助队列中的节点与二叉树中的节点进行关联。是一个成员变量,它的作用是存储指向二叉树节点的指针。这是一种常见的做法,为了方便使用和更好的代码可读性使用这样的别名。:这个成员是指向二叉树中节点的指针。这个指针用于将辅助队列中的节点与二叉树中的节点相关联。:这个结构体表示在构建二叉树时使用的辅助队列中的一个节点。类型的指针来操作辅助队列中的节点,包括访问其中的。结构体表示二叉树中的一个节点,包括节点的数据 (原创 2024-03-07 13:11:25 · 907 阅读 · 0 评论 -
二叉树前序遍历函数 代码图解(先序遍历 深度优先遍历)
【代码】二叉树前序遍历函数 代码图解(先序遍历 深度优先遍历)原创 2024-03-07 11:59:24 · 648 阅读 · 0 评论 -
二叉树层次建树
如果队列结构体中没有存储指向树结点的指针,那么就无法追踪最新的树结点,而这对于按顺序构建树结构是很重要的。(辅助队列为了获取新的树的指针 只能由自己的新队列结构体指针指向自己结构体中定义的树指针p来获取)这样做的目的是为了在队列中维护一个顺序,确保新创建的树结点按照输入的顺序被插入到树中。表示当前要插入新结点的位置的树结点的左子树是否为空,用于确定新结点应该插入的位置。表示当前要插入新结点的位置的树结点,而。不是树结点的值,而是指向树结点的指针。的值即为最新创建的树结点的指针,而。分别表示左子树和右子树。原创 2024-03-05 21:26:15 · 279 阅读 · 0 评论 -
结构体标签和结构体名(链表为例)
在这个上下文中, "tag_t" 用于表示结构体本身,而 "ptag_t" 用于表示指向该结构体的指针。为结构体选择名字的原因可能是任意的,也可能基于代码中使用该结构体的具体上下文。需要注意的是,C 中的命名约定并不是强制性的,开发者在选择类型和变量名字时通常有一定的灵活性。结构体标签是在结构体定义时给结构体起的一个标识符,用于标记这个结构体的类型。是一个辅助队列结点,它的目的是用来构建一个队列,按照输入顺序维护新创建的树结点。是辅助队列的结点类型,它用于维护一个队列,存储了树结点的指针。原创 2024-03-05 12:59:34 · 1208 阅读 · 0 评论 -
链表循环队列——及其详解(408 2019年第42题)
【代码】链表循环队列——及其详解(408 2019年第42题)原创 2024-03-04 12:12:35 · 166 阅读 · 0 评论 -
通过链表实现队列(C语言版)
【代码】通过链表实现队列(C语言版)原创 2024-03-03 20:29:43 · 287 阅读 · 0 评论 -
初始化栈 入栈 出栈(C语言版)
【代码】初始化栈 入栈 出栈(C语言版)原创 2024-03-02 21:00:46 · 280 阅读 · 0 评论 -
函数是否使用结构体C++引用情况说明
在这些情况下,如果希望在函数外部能够感知到头指针的改变,就需要传递头指针的指针或引用,以便在函数内部能够修改外部的头指针。在链表中,头指针通常指向链表的第一个节点,而头节点包含了链表的第一个元素以及指向下一个节点的指针。代码中,虽然链表头节点的位置发生了变化,但头指针仍然指向原始链表的地址,因此不算作头指针的改变。这里,传递的是链表头节点的一个副本,但通过这个副本仍然可以访问和修改链表中的节点。如果链表非空,而你删除了链表的头节点,那么头指针会被更新,指向新的头节点。的内容,但并没有改变链表头指针的指向。原创 2024-03-01 13:13:11 · 497 阅读 · 0 评论 -
C语言创建结构体时 什么时候需要C++引用 什么情况下下不需要引用
引用是C++中的一种特殊机制,用于更方便地传递参数,但在纯粹的C语言中,你通常会使用指针来达到相同的目的。修改结构体内容:如果在函数中需要修改结构体的内容,并且希望这些修改在调用函数后保持,那么应该传递结构体指针或使用C++的引用。在C语言中,通常会传递指针。上面的例子中,`modifyStruct` 函数接受结构体的指针,通过指针修改了结构体的内容,因此需要传递指针而不是直接的结构体。不修改结构体内容:如果只是需要读取结构体的内容而不修改它,那么不需要使用引用或指针,直接传递结构体即可。原创 2024-03-01 12:24:31 · 761 阅读 · 0 评论 -
尾插法新建链表
【代码】尾插法新建链表。原创 2024-02-28 16:26:57 · 447 阅读 · 0 评论 -
C语言中的SqList 含义
在C语言中,"SqList" 通常是指线性表(List)的顺序存储结构,其中 "Sq" 是 "Sequential" 的缩写。线性表是一种数据结构,它是一组按照顺序排列的元素的集合,其中每个元素都有唯一的前驱和后继。通常,SqList 的操作包括插入、删除、查找等,通过数组下标可以直接访问元素,这使得在顺序存储结构中进行一些基本的操作变得相对简单。是线性表中元素的类型,可以是整数、字符、结构体等。数组用于存储线性表的元素,而。通过这样的定义,可以使用数组。存储线性表中的元素,而。记录当前线性表的长度。原创 2024-02-27 13:23:49 · 6404 阅读 · 0 评论 -
#define
需要注意的是,在使用宏时应当谨慎,因为它们只是简单的文本替换,可能会导致意外的行为。例如,如果宏参数在替换时被多次评估,可能会引发意外的副作用。在实际编程中,可能会使用内联函数等方式来替代某些宏,以避免潜在的问题。是预处理指令的前缀符号,它标志着该行是预处理指令而非普通的C语句,告诉编译器在实际编译之前对这些指令进行处理。类似地,在条件编译指令中,如。开头的行为预处理指令,它们不是真正的C语句,而是由预处理器处理的特殊指令。的作用是在编译之前对源代码进行文本替换,将宏的标识符替换为宏的定义。原创 2024-02-27 13:22:08 · 836 阅读 · 0 评论 -
c语言中的宏指的是什么
宏定义通过 `#define` 关键字完成,可以用于表示常量、创建函数样式的代码块,以及执行简单的文本替换。在这个例子中,`PI` 是宏的标识符,而 `3.14159` 则是该宏的替换文本。在代码中使用 `PI` 时,预处理器会将其替换为 `3.14159`。宏在编写代码时可以提高代码的灵活性和可维护性,但也需要小心使用,避免潜在的问题,因为宏只是简单的文本替换,可能导致意外的行为。这个宏用于计算一个数的平方。在代码中使用时,比如 `SQUARE(5)`,预处理器会将其替换为 `((5) * (5))`。原创 2024-02-25 21:08:41 · 1507 阅读 · 0 评论 -
线性表的顺序表示
线性表的链式存储结构使用节点之间的指针来表示元素之间的关系。每个节点包含数据域和指针域,数据域存储元素的值,指针域存储下一个节点的地址。总体而言,线性表的顺序存储和链式存储都属于线性结构的范畴,因为它们都满足线性结构的定义,即元素之间存在一对一的关系。线性表的顺序存储结构使用一块连续的存储空间,通常是数组,来存储元素。元素在内存中按照其逻辑顺序依次存放,可以通过元素在数组中的位置来表示元素之间的关系。的关系,即每个元素都有一个直接前驱和一个直接后继,除了第一个元素没有直接前驱,最后一个元素没有直接后继。原创 2024-02-24 14:38:28 · 258 阅读 · 0 评论 -
动态内存分配的线性表的初始化过程
当需要往这个线性表中添加元素时,如果元素个数超过了这个初始长度,你可能需要进行动态扩容的操作,以确保有足够的空间存储更多的元素。扩容的过程涉及到重新分配内存,将原有的数据复制到新的内存空间中,并释放原有的内存。这两个变量的存在能够更方便地管理线性表的状态,比如检查是否需要进行动态扩容,以及获取当前线性表中有多少元素。这种设计考虑到了线性表可能需要不断地添加元素,以及在初始化时就分配足够的空间,以减少频繁的内存分配和释放操作。,而在动态分配的情况下,它可以随着动态扩容的过程而变化。的值,以确保它反映了。原创 2024-02-24 14:38:12 · 627 阅读 · 0 评论 -
空间复杂度
在算法设计中,通常追求更低的空间复杂度,以减少程序的内存占用,提高程序的效率。空间复杂度考虑的是算法对内存的使用情况,包括程序代码本身占用的空间、输入数据的存储空间和辅助变量等。当空间复杂度为 O(1) 时,算法的空间使用是常数级别的,不随输入规模的增加而增加。如果算法中使用的变量的数量是固定的,不随输入规模变化而变化,那么空间复杂度就是 O(1)。如果算法中使用的指针数量是常数,不随输入规模变化而变化,空间复杂度是 O(1)。这里使用了三个整数变量,但它们的数量是固定的,不随输入规模的增加而增加。原创 2024-02-23 09:56:54 · 347 阅读 · 0 评论 -
C语言中C++的引用
在C++中,当通过值传递参数时,函数接受的是原始数据的副本,而不是直接访问原始数据的地址。这意味着在函数内部对参数的任何修改都只影响到函数内的副本,而不会影响调用函数时传递的实际变量。b = b + 1;int a = 10;return 0;int &b表示b是对变量a的引用。modify_num函数确实修改了原始变量a,输出将是 "after modify_num=11"。在这个例子中,modify_num函数接受a的引用,对引用的修改实际上是对原始变量a的修改。因此,输出将是11。原创 2024-02-22 15:25:18 · 328 阅读 · 0 评论 -
地址线的低位和高位(高位地址线和低位地址线)分别是什么意思 他们的功能分别是什么
高位片选线用于选择大范围的地址范围内的设备,而低位片选线用于在特定芯片或设备内部进行更精细的选择,例如选择内部寄存器或存储器单元。总之,低位地址线和高位地址线一起构成了计算机系统中完整的地址线,用于将操作数或数据传送到指定的存储器单元或I/O设备。高位片选线(High-Order Chip Select Lines)和低位片选线(Low-Order Chip Select Lines)是与集成电路(IC)或芯片连接的控制线,用于选择特定的芯片或设备以进行通信。原创 2023-11-02 20:38:24 · 3702 阅读 · 0 评论 -
二叉树的空指针域为什么为 n+1
5. 最后,2n - (n-1) = n+1 表示总的空指针域的数量等于 n+1。这个公式表明,有n+1个空指针域,其中一个用于根节点的父节点指针,而其他n个用于每个节点的子节点指针。总之,这个公式解释了为什么n个节点的二叉链表中有n+1个空指针域,其中2n代表指针域总数,n-1代表节点之间的父子关系,而2n - (n-1) 等于总的空指针域数量。4. 2n - (n-1) 表示总的空指针域的数量,因为有2n个指针域,但只有n-1个节点具有父节点,所以空指针域的数量是2n - (n-1)。原创 2023-11-01 21:57:36 · 4111 阅读 · 1 评论 -
二叉树基本概念
4. 二叉搜索树性质:二叉搜索树 (BST) 的节点满足左子树的值都小于根节点的值,右子树的值都大于根节点的值。2. 二叉树的遍历**:二叉树的遍历有三种主要方法:前序遍历、中序遍历和后序遍历。3. **二叉树的深度**:二叉树的深度是从根节点到最深叶子节点的最长路径。1. 二叉树的节点定义:每个节点通常包括数据或值,以及指向左子节点和右子节点的指针。- 前序遍历:根 -> 左子树 -> 右子树。- 中序遍历:左子树 -> 根 -> 右子树。- 后序遍历:左子树 -> 右子树 -> 根。原创 2023-10-25 23:40:42 · 48 阅读 · 0 评论 -
函数和函数声明(队列实验)——数据结构
函数和函数声明以及关于栈的重要代码含义原创 2023-10-23 16:51:02 · 233 阅读 · 0 评论