Linux与数据结构 2019-2-1

承接上次的没有复习完的知识点。

1.数组

1.1 二维数组

例题:int a[5][2] = {1, 2, 3, 4, 5, 6, 7};int (*p)[2] = a;**p的值为?
解:p是一个二维的指针数组,其第一个元素是1,3,5,7,0的地址,因此 **p = 1。

例题:int a[5][2] = {(1, 2), (3, 4), (5, 6), 7}的元素只有括号中后面的,称为逗号表达式。
解:意即int a[5][2] = {2, 4, 6, 7, 0}。

例题:int i = 1;int c = (++i, ++i),则c的值?
解:首先c是一个逗号表达式,但是逗号表达式也会执行逗号之前的 ++i 操作,因此c的值为3。

2.函数

2.1 函数名缩写规则:去掉第二个及以后的元音和不发音的字母。

2.2 参数:传入参数和传出参数。

参数是传入参数还是传出参数可以根据函数参数中的 In_ 还是 Out_ 进行区分。

2.3 函数指针

对于函数指针,首先其是一个指针变量,该指针指向一个函数;其次,函数指针有两个用途:调用函数和做函数的参数。

3.字符串

3.1 例题

例:char str1[] = “hello”;char *str2 = “hello”;str1 = “hi”;str2 = “hi”;其中,str2可以被修改成功,str1会报错:不是一个可修改的左值。

3.2 strcpy、strcat会在结尾处加 \0 ,strncpy与strncat则不会在结尾处加 \0。

3.3 strcmp(“hi”, “hi”)语句会出现死循环现象,原因:因为"hi"与"hi"在相同的存储位置,因此会一直进行比较大小,但是由于开始的位置一样,因此不会出现不一样的值,进而会导致死循环。strcmp的工作原理是寻找不同的值结束,而不是寻找 \0 结束的。

4.结构体

4.1 结构体占内存的大小,按最大基本类型进行补齐。

4.2 相同结构体在不同的操作系统中的大小不同的原因:

1.对齐方式不同;
2.相同类型在不同位数操作系统中所占的大小不同。

4.3 结构体为什么要进行对齐?

为了方便在结构体中查找某一成员。

4.4 强制不对齐的方法:在开头加上 #pragma pack 1 语句,意为强制按1的倍数进行对齐。

5.数据结构

5.1 集合,线性表

5.2 线性表有两种存储方式:顺序存储和链式存储。

5.3 例题

例:一个数组有n个元素,值为0~n-1,若有重复的值则直接报错,请实现程序。
解:用第零个元素的下标与其值进行比较,不相同则将此元素交换到该元素所对应的下标处,在进行迭代;方法2:bit_map

5.4 链式存储

请完成一个单链表。

猜你喜欢

转载自blog.csdn.net/weixin_42896619/article/details/88187435