- 博客(94)
- 收藏
- 关注
原创 94、霍夫曼树
老师:最初的远距通信用于传递文本信息,主要是电报。小A:那如何将一段文字内容为“BADCADFEED”通过网络传递给别人呢?小B:利用二进制对这些字母进行,然后传输这个编码就行啊。小D:是的,电报不就“滴”和“答”嘛?!小A:那呢?小C:难道你没听说过ASCII码?小A:那时有没有ASCII码哦?小C:。。。
2024-08-21 18:40:50
416
原创 93、线索化二叉树
二叉树线索化之后每个结点都有一个线性下标,通过这个下标可以快速访问结点,而不需要遍历二叉树。链表线索化方法不会破化树的结构,不需要时线索化时销毁链表即可。然而线索化指针的加入又会浪费内存空间,不够灵活。利用结点空指针线索化二叉树之后不能够再恢复。利用结点空指针线索化的方法会破坏树的结构。线索化二叉树指的是将二叉树中的结点进行。利用结点中的空指针域,使其指向后继结点。,使其可以线性的方式访问每一个结点。链表线索化方法可以很容易的。
2024-08-21 18:39:57
294
原创 92、遍历二叉树
单链表的遍历是指从第一个结点开始( 下标为0的结点) , 按照某种次序依次访问每一个结点。二叉树的遍历是指从根结点开始,按照某种次序依次访问二叉树中的所有结点。思考:单链表可以有正序遍历和逆序遍历两种方式,那二叉树有几种遍历方式呢?
2024-08-21 18:38:17
363
原创 91、创建二叉树
if( ret )//用于指向插入的上一个结点//current指向插入的位置= NULL) )//定位//取最低位,110里面,0是最低位//右移1位count--;//把current赋值到node的后边,在left 还是 right?因为是被插入的结点,所以后边可能还有子树if( flag == BT_LEFT )//flag,确定被替代位置的子树是新节点的左子树还是右子树//在新结点左边//在新节点右边if( parent!= NULL )
2024-08-21 18:37:01
449
原创 89、二叉树的定义
二叉树是由n(n≥ 0)个结点组成的有限集合,该集合或者为空,或者是由一个根结点加上两棵分别称为左子树和右子树的、互不相交的二叉树组成。
2024-08-21 18:32:38
295
原创 87、树的定义
树是一种的数据结构树是由n ( n ≥ 0)个结点组成的有限集合如果 n = 0,称为空树;如果 n > 0,则:有一个特定的称之为根(root)的结点,它只有直接后继,但没有直接前驱除根以外的其它结点划分为 m (m≥0) 个 互不相交的有限集合T0, T1,, Tm-1,每个集合又是一棵树,并且称之为根的子树(subTree)
2024-08-21 18:27:34
429
原创 85、排序算法--初试斗转
每一趟 (例如第 i 趟,i= 0, 1, …, n-2)在后面n-i个待排的数据元素中选出关键字最小的元素,作为有序元素序列的第 i个元素。
2024-08-21 18:24:19
267
原创 84、排序的概念及分类
如果在序列中有两个数据元素r[i]和r[j],它们的关键字k[i] ==k[j]且在排序之前,对象r[i]排在r[j]前面。如果在排序之后,对象r[i]仍在对象r[j]的前面,则称这个排序方法是稳定的,否则称这个排序方法是不稳定的。
2024-08-21 18:22:46
349
原创 83、队列的特别实现
小B:重新实现的方式确实提高了顺序队列和链式队列的效率, 可是实现过程还是比较复杂。小A:这也是没有办法的,直接复用链表虽然可以实现队列,但是效率却不够好呀!!!小C:是不是有呢?
2024-08-21 14:44:59
275
原创 82、队列的实现
出队时将队头元素返回,且front++队尾下一个元素的下标入队时将新元素插入,且rear++没有必要只将下标为。的位置定义为队头!!!入队时将新元素通过reQr插入队尾,且将reQr指向新元素。
2024-08-21 14:43:21
738
原创 74、循环链表
将单链表中最后一个数据元素的next指针指向第一个元素在循环链表中可以定义一个“当前”指针,这个指针通常称为游标,可以通过这个游标来遍历链表中的所有元素。
2024-08-18 21:03:39
251
原创 74、静态链表
顺序表数组中的元素由两个数据域data和nextdata域用于存储数据next域用于存储下一个元素在数组中的下标在C99及之后的C语言标准中,允许在结构体的最后一个成员处定义一个没有指定大小的数组,这就是柔性数组。定义了一个TStaticListNode类型的变量header,它通常被用作静态链表的头节点。这个头节点可能包含一些特殊的信息,比如指向链表第一个数据节点的索引,或者它可能只是一个占位符,用于简化某些链表操作。定义了一个柔性数组node,
2024-08-18 21:02:09
702
原创 72、线性表的链式存储结构
为了表示每个数据元素与其直接后继元素之间的逻辑关系,每个元素除了存储本身的信息外,还需要存储指示其直接后继的信息。判断线性表是否合法判断位置是否合法由表头开始通过next指针移动pos次后,当前元素的next指针即指向要获取的元素。
2024-08-18 20:58:19
352
原创 69、线性表的本质
线性表(List)是零个或多个数据元素的集合线性表中的数据元素之间是有顺序的线性表中的数据元素个数是有限的线性表中的数据元素的类型必须相同线性表是具有相同类型的n(≥0)个数据元素的有限序列a1,a2,…,an),ai 是表项,n是表长度。
2024-08-18 20:51:10
290
原创 67. 动态类型识别
父类指针指向子类对象时,在需要的时候进行强制类型转换父类指针指向父类对象时,如此强制转换会出错在test里面,指针p指向的是父类对象,将父类对象强制转换为子类,当用父类对象去调用这个函数时,下面肯定有问题。
2024-08-18 19:10:37
672
原创 66. 异常处理(下)
catch(…)可以捕获所有异常但却无法得到异常信息catch(…)一般作为最后一个异常处理块出现看见代码中的catch就要意识到这里在处理异常情况,而异常是在对应的try中产生的。在构造函数可能申请系统资源,而在构造函数中抛出异常会导致对象构造不完全(构造函数还没结束,不给你调用析构函数)不完全对象的析构函数是不会被调用的,因此可能造成资源泄漏在工程中会定义一系列的异常类(工程中抛出异常类对象)通过继承,可以得到一个异常类族每个类代表工程中可能出现的一种异常类型由于对象构造与拷贝的开销,
2024-08-18 19:07:05
254
原创 64. 60-63经典问题解析
模板最初的目标只是为了对类类型进行泛型操作的定义,因此用class关键字声明泛型类型在之后的进化过程中发现了模板相互调用时产生的 :: 操作符的二义性因此引入typename关键字是用于告诉编译器将 :: 符号后的标识符看作类型。
2024-08-18 19:02:12
130
原创 63. STL简介
STL是C++标配的模板库,是工程经验的总结,也是开发效率和软件可靠性的保证。push:无返回值,将元素压栈( 队列)pop:弹出栈( 队列)第一个元素。front:返回队列第一个元素。top:返回栈第一个元素。(找个stl参考书)
2024-08-18 19:00:49
236
原创 62. 类模板(下)
特化和重新定义新类看上去没有本质区别,但是如果定义新类,那么将变成一个类模板和一个新类,使用的时候需要考虑究竟是用类模板还是用新类而特化可以统一的方式使用类模板和特化类,编译器自动优先选择特化类(考虑友好度)非类型。
2024-08-16 11:28:12
376
原创 61. 类模板(上)
一些类主要用于存储和组织数据元素,如:数组类,链表类,Stack类,Queue类等 提供一种特殊的类以相同的行为处理不同的类型在类声明前使用template进行标识<typenameT>用于说明类中使用的泛指类型T 编译器从类模板通过具体类型产生不同的类编译器在声明的地方对类模板代码本身进行编译(第一次编译)编译器在使用的地方对参数替换后的代码进行编译(第二次编译) 使用具体类型定义对象 由于类模板的编译机制不同,所以不能像普通类一样分开实现后,在使用时只包含头文件在工程实践上,一般会把类模板的定
2024-08-16 00:02:46
541
原创 60. 函数模板
当声明的类型参数为返回值类型时,无法进行自动类型推导。不完美解决方案:将返回类型参数声明到第一个参数位置,调用时只需显示声明返回类型参数即可。template<typename RT, typename T1, typename T2>//RT放在了第一个参数//推导不出返回值类型RT//把返回值类型放在第一个参数,解决这个问题cin.get();
2024-08-15 16:42:47
319
原创 57. 继承与多态(上)
在子类中定义与父类中原型相同的函数(函数重写)函数重写只发生在父类与子类之间父类中被重写的函数依然会继承给子类默认情况下子类中重写的函数将隐藏父类中的函数通过作用域分辨符::可以访问到父类中被隐藏的函数。
2024-08-15 16:36:48
366
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人