数据结构
文章平均质量分 75
道_可
待到来年花开,依旧
展开
-
哈希表以及哈希表的底层结构 --- 万字解说【c++11】
-(常用)取关键字的某个线性函数为散列地址:Hash(Key)= A*Key + B优点:简单、均匀缺点:需要事先知道关键字的分布情况使用场景:适合查找比较小且连续的情况。原创 2024-03-29 16:42:53 · 700 阅读 · 0 评论 -
数据结构中的平衡搜索树 --- 红黑树 (如何旋转与变色)
红黑树和AVL树都是高效的平衡二叉树,增删改查的时间复杂度都是O($log_2 N$),红黑树不追求绝对平衡,其只需保证最长路径不超过最短路径的2倍,相对而言,降低了插入和旋转的次数,所以在经常进行增删的结构中性能比AVL树更优,而且红黑树实现比较简单,所以实际运用中红黑树更多。这时会发现违反性质3比违反性质4的代价要更小,而事实上也的确是这样做的,可能会有疑问,这样还是红黑树嘛,其实新增节点之后是需要通过变色来达到红黑树的结构的。此时我们会发现,最后的结构是符合红黑树的:没有出现连续的红色节点;原创 2024-03-13 15:43:42 · 783 阅读 · 0 评论 -
数据结构中的平衡搜索树 --- AVL树是怎样进行旋转处理的?(平衡因子版本)
树做一些结构修改的操作,性能非常低下,比如:插入时要维护其绝对平衡,旋转的次数比较多,更差的是在删除时,有可能一直要让旋转持续到根的位置。):第一次单旋会把30节点 、60节点 的平衡因子置成 0,第二次单旋会把60节点 、90节点 的平衡因子置成 0 ,这显然是不对的,因为90节点最后的平衡因子应该是1。因为AVL树也是二叉搜索树,可按照二叉搜索树的方式将节点删除,然后再更新平衡因子,只不错与删除不同的时,删除节点后的平衡因子更新,最差情况下一直要调整到根节点的位置。什么时候右旋,什么时候双旋呢?原创 2024-03-12 17:49:09 · 662 阅读 · 0 评论 -
二叉搜索树 - c++实现
对有n个结点的二叉搜索树,若每个元素查找的概率相等,则二叉搜索树平均查找长度是结点在二叉搜索树的深度的函数,即结点越深,则比较次数越多。a、从根开始比较,查找,比根大则往右边走查找,比根小则往左边走查找。在二叉搜索树中检索该单词是否存在,存在则拼写正确,不存在则拼写错误。若它的左子树不为空,则左子树上所有节点的值都小于根节点的值。若它的右子树不为空,则右子树上所有节点的值都大于根节点的值。b、最多查找高度次,走到到空,还没找到,这个值不存在。,统计成功后,给定单词就可快速找到其出现的次数,原创 2024-01-22 15:09:40 · 825 阅读 · 0 评论 -
常见排序集锦-C语言实现数据结构
希尔排序又称缩小增量法,思想 :算法先将要排序的一组数按某个增量 gap 分成若干组,每组中记录的下标相差 gap .对每组中全部元素进行排序,然后再用一个较小的增量对它进行分组,在每组中再进行排序。根据序列中两个记录键值的比较结果来对换这两个记录在序列中的位置,冒泡排序的特点是:将键值较大的记录向序列的尾部移动,键值较小的记录向序列的前部移动。:假定在待排序的记录序列中,存在多个具有相同的关键字的记录,若经过排序,这些记录的相对次 序保持不变,即在原序列中,r[i]=r[j]它是通过堆来进行选择数据。原创 2023-08-16 20:53:31 · 639 阅读 · 0 评论 -
二叉树的链式结构 - 遍历 - C语言递归实现
思路:也是两种方法,第一种方法是在上一道例题的基础上,创建一个全局变量,用if判断。②是先求出左子树结点的个数再加上右子树结点的个数,最后再加上根。思路:求出左树的深度,再求出右树的深度,加1是加根,然后比较以下,谁大/深返回谁。思路:分治算法,分而治之,把大问题转换成类似规模的小问题。这里有两种方法,①是定义一个全局变量,每递归一次,变量就++一次。注:这里值得注意的一点是,返回值的问题以及跳出递归。用前序遍历一下就行。访问根结点的操作发生在遍历其左右子树之中(间)。由于被访问的结点必是某子树的根,原创 2023-07-29 00:30:27 · 215 阅读 · 0 评论 -
快慢指针 - 关于链表oj题的思路延申
与fast之间的结点距离为N,这个时候fast才真正开始追击slow,slow每次访问一个结点,fast每次访问两个结点,所以它们之间的距离每次都会缩减1个结点。定义:快慢指针,即慢指针一次走一步,快指针一次走两步,两个指针从链表其实位置开始运行,如果链表带环则一定会在环中相遇,否则快指针率先走到链表的末尾。一个指针从头指针的位置开始向后访问,一个指针从快慢指针相遇的地方开始向后访问,两个指针会在入环的第一个结点相遇。综述,3,4...n步皆是视情况而定,不一定能追上,但是两步是一定能追上。原创 2023-07-05 13:43:59 · 67 阅读 · 0 评论 -
数据结构单链表 - C语言实现
概念:链表是一种物理存储结构上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。注:以上概念以及图片均来自比特科技。原创 2023-06-30 23:47:23 · 72 阅读 · 0 评论 -
数据结构顺序表 - C语言实现接口
顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构,一般情况下采用数组存储。在数组上完成数据的增删查改。原创 2023-06-30 20:24:52 · 47 阅读 · 0 评论 -
数据在内存中的存储(2)-浮点数在内存中的存储-C语言
这时,浮点数就采用下面的规则表示,即指数E的计算值减去127(或1023),得到真实值,再将有效数字M前加上第一位的1。这时,浮点数的指数E等于1-127(或者1-1023)即为真实值, 有效数字M不再加上第一位的1,而是还原为 0.xxxxxx的小数。科学计数法中的E是可以出现负数的,所以IEEE 754规定,存入内存时E的真实值必须再加上一个中间数,对于8位的E,这个中间数是。比如,2^10的E是10,所以保存成32位浮点数时,必须保存成10+127=137,即10001001。当s=1,V为负数。原创 2023-04-16 14:14:05 · 47 阅读 · 0 评论 -
数据在内存中的存储(1)-C语言
①char虽然是字符类型,但是字符类型在存储的时候,存储的是字符的ASCII码值,ASCII码值是整数,所以char也是整型。无符号整型:只有正数可以存放在无符号的变量中,换言之就是无符号整型中没有负数。三种表示方法均有符号位和数值位两部分,符号位都是用0表示“正”,用1表示“负”对于整形来说:数据存放内存中其实存放的是补码。计算机中的有符号数有三种表示方法,即原码、反码和补码。② 有符号整型:有正负的数据可以存放在有符号的变量中。将原码的符号位不变,其他位依次按位取反就可以得到了。原创 2023-04-15 19:49:06 · 49 阅读 · 0 评论 -
请简述大端字节序和小端字节序的概念,设计一个小程序来判断当前机器的字节序
但是在C语言中除了8bit的char之外,还有16bit的short型,32bit的long型(要看具 体的编译器),另外,对于位数大于8位的处理器,例如16位或者32位的处理器,由于寄存器宽度大于一个字节,那么必然存在着一个如果将多个字节安排的问题。例如一个 16bit 的 short 型 x ,在内存中的地址为 0x0010 , x 的值为 0x1122 ,那么 0x11 为高字节, 0x22 为低字节。小端模式,刚好相反。,是指数据的低位保存在内存的低地址中,而数据的高位,,保存在内存的高地址中。原创 2023-04-09 16:07:59 · 128 阅读 · 0 评论 -
隐式类型转换 - 整型提升
因为这里是 char 类型,据我们熟知的是 char 类型是一个字节,8个比特位,正常数据在内存中的存储是32个比特位,所以这里发生了截断,而此时如果需要拿到里面的数据的时候,需要进行整型提升,所以这里打印的是 -126。表达式的整型运算要在CPU的相应运算器件内执行,CPU内整型运算器(ALU)的操作数的字节长度 一般就是int的字节长度,同时也是CPU的通用寄存器的长度。补:整数在内存中存储的形式是补码的形式,但是使用的时候是使用原码的形式;整形提升是按照变量的数据类型的符号位来提升的。原创 2023-04-09 13:35:57 · 58 阅读 · 0 评论