1. 分享记录

在这里插入图片描述

  1. B树、B-树、B+树、B*树之间的关系

  2. 在对n个元素进行快排的过程中,最坏情况需要进行 n-1 轮。
    快速排序的基本思想是分治。
    快排是不稳定的,关键在于划分过程。现有的几种划分过程,基本都是分两个指针从左右同时扫描,然后交换元素,交换过程很容易打乱元素位置。
    元素比较次数,也就是其复杂性分析。理想情况下,快速排序每次划分都将原始序列划分为两个等长的子序列。所以其比较次数为T(n)=2T(n/2)+n,所以其平均期望时间为nlog(n)。但在最坏情况下,即序列有序情形下,每次划分只能分出一个元素,因而总共需要(n-1)次划分,总的比较次数为(n-1)+(n-2)+…+1=n(n-1)/2,即退化为O(n^2).
    在这里插入图片描述

  3. 已知一颗二叉树,如果先序遍历的节点: KDCEFGHB,中序是:CDFEGHKB,后序结果是:
    CFHGEDBK
    https://blog.csdn.net/My_Jobs/article/details/43451187

  4. 二叉排序树

  5. 二叉树的第K层(根为第一层)的节点数最多为 2^(k-1)

  6. 如果数据是正整数,并且数据的范围和数据个数差不多,计数排序最有效

  7. 贪心算法:
    1)Huffman 编码是基于贪心算法
    2)贪心算法不总是导致最佳
    3)贪心算法是设计算法的一种方法论

  8. 若平衡二叉树的高度为4(只有根节点的二叉树高度为1),且所有非叶子节点的平衡因子均为1,则该二叉树的节点总数为 7.
    平衡二叉树公式:
    1)最少节点个数: f(n) = f(n-1) + f(n-2) + 1, f1=1, f2=2, f3=4。
    2)最多节点个数:2^n -1.

  9. 加权有向图,已知边信息有:(1,2,1), (1,3,3), (1,4,5), (2,5,7), (4,5,4),求起点 1 到终点 5 的最短距离:8

  10. 对于下列关键字序列,不可能构成某二叉搜索树中一条查找路径
    的序列是(B) B. 95, 22, 91, 24, 94, 71

  11. AVL 树
    假设有一棵包含 N 个节点的 AVL 树,则其平均查找复杂度是 D. O(logN)

  12. 优化选项

-O0 关闭所有优化选项
-O 或者 -O1 最基本的优化等级
-O2 ,-O1的进阶等级,推荐使用的优化等级,编译器会尝试提高代码性能,而不会增加体积和大量占用编译时间
-O3 最高优化等级,会延长编译时间

  1. DDB 分配结构体时,又想使用数组,又担心分配空间过大时,可以使用零长数组。
    数据结构最后一个元素被定义为零长度数组,不占结构体空间,这样,可以根据对象大小动态地分配结构的大小。

  2. 它们是什么区别?
    指针数组与数组指针都是看后面的
    指针数组。指针是定语,修饰数组,本质是数组,存放的是指针;
    数组指针,数组是定语,修饰指针的,这个指针指向了数组。

int brr[5][5];
int **pp;
int *ap[5];   // 指针数组, []优先级高,先与ap结合成为一个数组,再由int*说明这是一个整型指针数组
int (*pa)[5]; // 数组指针,定义一个数组指针,指向含5个元素的一维数组。

 pp = brr;    // 报错:error C2440: “=”: 无法从“int [5][5]”转换为“int **”
*pp = *brr;   // 报错,使用了未初始化的局部变量“pp”
*ap = *brr;   // 可以赋值,ap是指针数组,指向了brr[0]
*pa = *brr;   // 报错,表达式必须是可修改的左值, 不可指定数组类型
int test(int a)
{
	int brr[5][5];
	int(*pa)[5]; // 数组指针,定义一个数组指针,指向含5个元素的一维整型数组。
	int arr[5] = {1, 2, 3, 4, 5};
	pa = &brr[0];         // 可以,指向 brr[0]
	pa = (int (*)[5])arr; // 可以,指向 arr的5个元素

	int *ap[5];  // 指针数组, []优先级高,先与ap结合成为一个数组,再由int*说明这是一个整型指针数组
	ap[0] = &arr[0];
	ap[1] = &arr[1];
	ap[2] = &arr[2];
	ap[3] = &arr[3];
	ap[4] = &arr[4];
	*ap = *brr;  // 可以,ap是指针数组,指向了brr[0]

	return 0;
}

在这里插入图片描述

  1. fopen的区别?
FILE *fp = fopen("test data", "a+b");
与
FILE *fp = fopen("test data", "a+x");
  1. int a[const 5] 与 int (* const)[5];
	int const(* pa)[5];        // 数组指针,pa指向的对象比如 pa[0][0]不能修改
	int(* const pb)[5] = NULL; // 数组指针,pb本身不能修改
  1. 可变长数组计算大小
void Func(int n) {
	int value[n];
	printf("value = %d\n", sizeof(value));
}
  1. 数组能否作为形参
double testSum(const double ops[] , int a);
声明为: extern double testSum(const double *, int a);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值