《C++开发工程师岗位必备知识点三》

①平衡二叉树的平衡因子的理解

平衡因子满足绝对值小于或者等于1

②子类对基类访问权限问题总结

③直接插入排序理解

④快速排序额外空间问题

快排可以说需要的空间为O(1),因为是原地排序,不需要额外空间;也可以说需要的空间是O(n),因为在递归调用时有栈的开销,当然最坏情况是O(n),平均情况是O(logn)。

⑤不同的类具有相同的间接基类的理解

为了建立唯一的间接基类版本,应该声明派生类虚继承基类,在派生列表中,同一基类只能出现一次,但实际上派生类可以多次继承同一个类。派生类可以通过两个直接基类分别继承自同一间接基类,也可以直接继承某个基类,再通过另一个基类再次继承该类。但是,如果某个类派生过程中出现多次,则派生类中将包含该类的多个子对象,这种默认情况在很多有特殊要求的类中是行不通的。虚继承就是为了应对这一情况而产生,虚继承的目的是令某个类做出声明,承诺愿意共享其基类。这样不论虚基类在继承体系中出现多少次,派生类中都只包含唯一一个共享的虚基类子对象。

⑥指针数组、数组指针以及指针变量的sizeof理解

char *p[10] 是指针数组,数组里存放了10个指针,在64位系统下指针占8个字节,所以sizeof(p) = 10 * 8 = 80.

char (*p1)[10]是数组指针,p1是一个指向存放10个char类型的数组的指针,所以sizeof(p1) = 8.

在32位计算机中,一个指针变量的返回值必定是4(注意结果是以字节为单位),但是,在64位系统中指针变量的sizeof结果为8。

数组的sizeof值等于数组所占用的内存字节数,如:

char a1[] = "abc"; int a2[3]; sizeof( a1 ); // 结果为4,字符末尾还存在一个NULL终止符 sizeof( a2 ); // 结果为3*4=12(依赖于int)

⑦选择排序简单理解

通过n-1次关键字间的比较,从n-i+1个记录中选出关键字最小的记录,并和第i(1<=i<=n)个记录交换之。

⑧KMP算法next与nextval理解

下面单独给出实例让大家理解next与nextval的计算

T : 1 2 3 4 5 6 7
串 : a b c a b a a
next : 0 1 1 1 2 3 2
nextval:0 1 1 0 1 3 2
先说next。next值本身的含义即是当进行匹配的模式串发生失配后,失配的这一字符再次进行匹配时要与哪个字符再进行比较?我们可以理解为这次配不上,那我下次和谁比?这样,next的值就与T发生了关系,表示了字符的比较位置。T就是元素的位置。
开始不用说,a前面没有,就是0,b要和a比,a的位置是1,b就是1。简单说,开头两个肯定是0,1!
第三个,c,c的前面是b,bc无法与开头的a比,所以c还是要单独找位于1的a,所以它也是1。
第四个,a,和第三个c一样,没有可以满足ca的字符串,最后a只能自己和第一个a配,它也是1。
第五个,b,看b前面,正好,a可以与开头的a对上,而第五个b正好在2的位置,所以b就是2。
第六个,a,看a前面,发现,a前面的ab可以与开头的ab对上,对上后,第六个a在位置3,所以就是3。
第七个,a,看a前面,只有a能够与开头配上,而“baa”则不行,所以它只有为2。
由此可以看出,next的计算,实际上就是计算当前字符以及当前字符前面的字符与开头匹配成功后,当前字符的最终位置,如果不成,就只能单独找第1个,所以它的值只能为1。
再看nextval,nextval是建立在next的基础上,我自己是这样理解的:同样是匹配,如果匹配成功,则位于后面的字符的next继承匹配成功的字符的nextval值,如果不成,保持不变。
以上为例:
第二位置的b按next值与开头a比较,不符,nextval不变,为1。
第三位置的c同样与1位置的a比较,不同,不变还是为1。
第四位置的a按next值与开头a比较,相同,继承开头a的nextval值,0。
第五位置的b按next值与二位置的b比较,相同,继承b的nextval值,1。
第六位置的a按next值与三位置c比较,不同,保持不变,3。
第七位置的a按next值与二位置b比较,不同,保持不变,2。

⑨线索二叉树理解

各种二叉链表,不管二叉树的形态如何,空链域的个数总是多过非空链域的个数。准确的说,n各结点的二叉链表共有2n个链域,非空链域为n-1个,但其中的空链域却有n+1个。因此,提出了一种方法,利用原来的空链域存放指针,指向树中其他结点。这种指针称为线索。因此线索二叉树的线索数为二叉链表中的空链域的值。

⑩C语言中的关键字汇总

 1、auto:声明自动变量,一般不使用。 2、break:跳出当前循环。 3、case:开关语句分支。 4、char:声明字符型变量或函数。 5、const:声明只读变量。 6、continue:结束当前循环,开始下一轮循环。 7、default:开关语句中的“其他”分支。 8、do:循环语句的循环体。 9、double:声明双精度变量或函数。 10、else:条件语句否定分支。(可与if连用) 11、enum:声明枚举类型。 12、extern:声明变量是在其他文件正声明。 13、float:声明浮点型变量或函数。 14、for:循环当中的一种语句。 15、goto:无条件跳语句。 16、int:声明整型变量或函数。 17、if:条件语句。 18、long:声明长整型变量或函数。 19、register:声明寄存器变量。 20、return:子程序返回语句(可以带参数,也可以不带参数)。 21、sh ort:声明短整型变量或函数 22、signed:生命有符号类型变量或函数。 23、sizeof:计算数据类型长度。 24、static:声明表态变量。 25、struct:声明结构体变量或函数。 26、switch:用于开关语句。 27、typedef:用以给数据类型取别名(当然还有其他作用)。 28、union:声明联合数据类型。 29、unsigned:声明无符号类型变量或函数。 30、void:声明函数无返回值或无参数,声明无类型指针。 31、volatile:说明变量在程序执行中可被隐含地改变。 32、while:循环语句的循环条件。

⑪计数排序

计数排序是一种基于统计的排序算法。需要遍历所有数据,时间复杂度 O(N) ,但最后输出排序后的序列更合理,设 k 为数据范围(最大值 - 最小值),则遍历标记数组需要 O(k) ,总共 O(N+k) ,当数据范围是 k 时,空间复杂度 O(k) 。计数排序局限性比较大,只限于对整数进行排序。

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值