[考研笔记] 991数据结构C语言最终总结

前言

今天是2021年12月20日,距离考研还有5天。根据之前做的教材习题、历年真题以及去年的全真模拟,最后再进行一次综合性总结;

大部分内容提炼至 [考研笔记] 数据结构1.1 C 语言基础1.2 C 语言进阶1.4.3 指针与引用

文章基本是给自己看的,结构就会比较杂乱了。

目录

1 数据结构真题分析

2 数据结构知识点

3 数据结构算法设计

4 C 语言真题分析

5 C 语言知识点

6 C 语言程序设计

7 关于 2021 991 真题

 

[考研笔记] 991 数据结构 C 语言最终总结

1 数据结构真题分析

 

2 数据结构基础知识

2.1 基本概念类

  2.1.1 数据结构基础

    逻辑结构:是数据元素之间所存在的逻辑关系;

    物理结构:是数据结构在计算机中的存储方式(映像);

    两者关系:逻辑结构独立于存储结构;物理结构是逻辑结构的映像;

  2.1.2 线性表系列

    线性表:是具有相同数据类型的 n 个数据元素的有限序列;

    顺序表:是线性表的顺序存储结构,用一组地址连续的存储单元存储数据;

    链表:是线性表的链式存储结构,用一组任意的存储单元存储数据;

    :是一种运算受限的线性表,只允许在一端进行插入或删除操作;

    队列:是一种运算受限的线性表,只允许在一端插入、另一端删除;

  2.1.3 树系列

    二叉树:是度不大于 2 的有序树,即每个结点至多 2 棵子树,且有左右之分;

    线索二叉树:在二叉树的基础上在叶子结点的空指针加上结点前驱或后继,以便于遍历二叉树;

    二叉排序树:是满足任意结点的左子树所有结点权值小于该结点、右子树大于该结点的二叉树;

    哈夫曼树:树中所有叶子结点带权路径长度之和最小的树;

  2.1.4 图系列

    完全图:是任意两点之间都存在边(或两条方向相反的弧)的图;

    子图:边集与点集均为另一个图的子集的图(不强调是图则不一定是子图);

    (强)连通分量:即极大(强)连通子图,对于(强)连通图来说即其自身;

    最小生成树:包含全部顶点的极小连通子图;

    AOV 网:建立在 DAG 上的用点表示活动、用弧表示活动优先级的网;

    AOE 网:建立在 DAG 上的用点表示事件、用弧表示活动的网;

    关键路径:具有最大路径长度(路径各个活动所需时间之和)的路径;

  2.1.5 查找

    顺序文件:物理结构与逻辑结构记录排列先后次序一致的文件;

    索引查找:利用索引表进行的查找方法,索引记录了关键字值与记录的存储位置之间的对应关系;

    散列查找:通过对元素的关键字值进行散列函数运算,直接求出元素的地址,而不需反复比较的查找方法;

2.2 性质类

  顺序表是一种随机存取的结构,存储密度大;

  最适合做队列的链表结构是单向循环链表

  更适合做队列的链表结构是带头指针、尾指针的单向非循环链表

  循环队列不会出现假溢出情况;

  二叉排序树中序遍历严格单调递增;

  散列查找效率取决于:散列函数的定义、冲突的处理方法、装填因子大小(记录数 / 表长)

  m 阶 B- 树(多路平衡查找树)是一棵 m 叉树,结点最多有 m 个子结点,最多有 m - 1 个关键字;根结点最少有 2 个,其他非叶子结点最少有 m / 2 个;

  B+ 树有 n 个关键字的结点有 n 个子结点,叶子结点数 = 记录数,有两个入口;

2.3 方法论

  2.3.1 求关键路径

    拓扑序求出各事件最早发生时间 ve(最长路径长度);

    逆拓扑序求出各事件最晚发生时间 vl

    各活动最早发生时间 e 等于起点事件的最早发生时间;

    各活动最晚发生时间 l 等于终点事件的最晚发生时间减去活动时间 w;

    所有 e = l 的活动为关键活动,构成关键路径。

  2.3.2 判断是否为折半判定树

    将有序序列按中序遍历填入判定树中,观察取整方式是否一致;

  2.3.3 B- 树的插入与删除

    插入:从最底层(不包括外部结点)插入,如果导致溢出,即关键字个数超过 m - 1,则取最中间关键字上移至父结点,划分出的两部分分别放在原结点和新结点,并保持 B- 树的性质,依次递归直到不出现溢出或者到根结点为止;

    删除:如果被删关键字所在结点为叶子结点,且关键字个数 < m / 2,则将个数 >= m / 2 的兄弟结点邻近关键字上移至父结点,父结点同侧关键字下放替补被删关键字,这样结点个数是不变的;如果不存在这样的兄弟结点,则只有下放操作,这样就会删除一个结点。

  2.3.4 堆积的插入与删除

    插入:插入结点到最后位置,开始向上调整:如果结点大于父结点,则交换,以此类推直到满足堆积性质;

    删除:删除根结点后将最后一个结点与根结点交换,开始向下调整:每次选择子结点的较大值进行交换,以此类推直到满足堆积性质;

  堆积序列??

2.4 比较类

  2.4.1 顺序存储与链式存储

    

  2.4.2 顺序存储与一维数组

    相同点:使用连续地址存储,支持随机存取;

    不同点:数组只能存取元素;线性表长度可变;

  2.4.3 排序方法

    平均时间复杂度:插入 = 冒泡 = 选择(O(n ^ 2))> 堆积 = 归并 = 快速(O(n log n))

    空间复杂度:归并(O(n))> 快速(O(n log n))> 其他(O(1)) 

    稳定性:插入、冒泡、归并稳定;希尔、快速、选择、堆积不稳定;

2.5 分类及其他

  物理结构分类:顺序存储、链式存储、索引存储、散列存储;

  数据结构三要素:逻辑结构、存储结构、算法(定义+实现);

  算法五大特性:有穷性、确定性、有效性、输入、输出;

  好的算法的目标:正确性、可读性、健壮性、效率、低存储量需求;

  卡特兰数:C(n, 2n) / (n + 1);

  散列函数构造:直接定址法、除留余数法(素数)等;

  冲突处理方法:开放定址法(线性探测再散列(造成聚集)、二次、伪随机)、再散列、链地址;

 

3 数据结构算法设计

3.1 后序遍历非递归算法

 

4 C 语言真题分析

 

5 C 语言知识点

5.1 常考运算符优先级

  高优先级:()、->、前自增自减;!、寻址、取址、后自增自减;

  中优先级:乘除;加减;左移右移;比较运算符;

  低优先级:与;异或;或;逻辑和;逻辑或;

  最低优先级:逗号。

5.2 文件函数

  5.2.1 指针放前面

    fscanf/fprintf(fp, "...", ...); 格式化读写文件;

    fseek(fp, offset, SEEK_SET/CUR/END(0/1/2)); 改变文件位置标记;

  5.2.2 指针放后面

    fgetc(fp); fputc(ch, fp); 读写字符;

    fgets(str, n, fp); fputs(str, fp); 读写字符串;

    fread/fwrite(buffer, size, count, fp); 二进制读写文件;

  5.2.3 其他

    rewind(); 使文件位置标记指向开头;

    ftell(); 返回当前文件位置标记的位置;

    feof(fp); 判定文件是否结束;

5.3 指针

  指针数组/函数本质是数组/函数,声明时不用括号,比如 int *p[2], int *q(int);

  数组/函数指针本质是指针,声明时需要括号,比如 int (*p)[2], int (*q)(int)。

5.4 其他

  共用体:所有数据成员共用一片内存地址;每次只有一个成员起作用;定义时不能初始化;

  全局变量和局部变量:局部变量是指在某个语句块(类、函数等)中内部定义的变量和函数参数,只能在块中使用;全局变量有效范围从文件中定义位置开始到文件结束;

  函数数据传递:参数传递;全局变量;函数返回值;

  主函数参数:argc 用来统计命令行参数个数,argv 用来存放参数字符串;

  预处理指令:是在真正编译开始之前由编译器调用的独立程序指令;

  头文件:调用库功能;加强类型安全检查;<> 适用于工程或标准头文件;"" 适用于自定义头文件;

  宏定义:用于定义一个标识符常量或带参的宏,本质上是一种文本替换;

  字符数组不能被直接赋值,必须使用 strcmp

 

6 C 语言程序设计

6.1 文件模板

6.2 交换函数的位运算模板

void swap(int &a, int &b) { 
    a ^= b ^= a ^= b; 

7 关于 2021 991 真题

很大区别于往年(2020年真题未知),无论是数据结构还是 C 语言,综合题中都出现大量需要写代码的题,并且出题不像往年那么死板;

数据结构的简答题连考了 4 道概念题(逻辑物理结构、哈夫曼树、散列查找、快速排序),不知道是否为一种趋势;

选择题、设计题没有太大变化。

posted @ 2021-12-20 18:12  jinkun113  阅读(843)  评论(0编辑  收藏  举报