-
B树、B-树、B+树、B*树之间的关系
-
在对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).
-
已知一颗二叉树,如果先序遍历的节点: KDCEFGHB,中序是:CDFEGHKB,后序结果是:
CFHGEDBK
https://blog.youkuaiyun.com/My_Jobs/article/details/43451187 -
二叉排序树
-
二叉树的第K层(根为第一层)的节点数最多为 2^(k-1)
-
如果数据是正整数,并且数据的范围和数据个数差不多,计数排序最有效
-
贪心算法:
1)Huffman 编码是基于贪心算法
2)贪心算法不总是导致最佳
3)贪心算法是设计算法的一种方法论 -
若平衡二叉树的高度为4(只有根节点的二叉树高度为1),且所有非叶子节点的平衡因子均为1,则该二叉树的节点总数为 7.
平衡二叉树公式:
1)最少节点个数: f(n) = f(n-1) + f(n-2) + 1, f1=1, f2=2, f3=4。
2)最多节点个数:2^n -1. -
加权有向图,已知边信息有:(1,2,1), (1,3,3), (1,4,5), (2,5,7), (4,5,4),求起点 1 到终点 5 的最短距离:8
-
对于下列关键字序列,不可能构成某二叉搜索树中一条查找路径
的序列是(B) B. 95, 22, 91, 24, 94, 71 -
AVL 树
假设有一棵包含 N 个节点的 AVL 树,则其平均查找复杂度是 D. O(logN) -
优化选项
-O0 关闭所有优化选项
-O 或者 -O1 最基本的优化等级
-O2 ,-O1的进阶等级,推荐使用的优化等级,编译器会尝试提高代码性能,而不会增加体积和大量占用编译时间
-O3 最高优化等级,会延长编译时间
-
DDB 分配结构体时,又想使用数组,又担心分配空间过大时,可以使用零长数组。
数据结构最后一个元素被定义为零长度数组,不占结构体空间,这样,可以根据对象大小动态地分配结构的大小。 -
它们是什么区别?
指针数组与数组指针都是看后面的
指针数组。指针是定语,修饰数组,本质是数组,存放的是指针;
数组指针,数组是定语,修饰指针的,这个指针指向了数组。
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;
}
- fopen的区别?
FILE *fp = fopen("test data", "a+b");
与
FILE *fp = fopen("test data", "a+x");
- int a[const 5] 与 int (* const)[5];
int const(* pa)[5]; // 数组指针,pa指向的对象比如 pa[0][0]不能修改
int(* const pb)[5] = NULL; // 数组指针,pb本身不能修改
- 可变长数组计算大小
void Func(int n) {
int value[n];
printf("value = %d\n", sizeof(value));
}
- 数组能否作为形参
double testSum(const double ops[] , int a);
声明为: extern double testSum(const double *, int a);