1. 编译过程
预处理,编译,汇编,链接
2. 预处理
头文件包含,宏定义展开,条件编译选择
3. 宏定义(平行展开,内外同时进行。比小函数性能高)
变量,文件,函数(可变参数 … ##VA_ARGS),#,##
4. 字节序
大端(高字节低地址),小端(arm/x86),网络,主机
5. 深拷贝,浅拷贝
6. 字节对齐
提高CPU访问数据的效率(次数),提高对CPU/编译器兼容性(否则:段错误/效率低)
7. 结构体大小(变长数据包)
自然对齐,指定对齐(#pragma)
8. 联合体成员取值(int char*),联合体大小
9. 线性表
数组/链表/栈/队列。单/双链表添加元素、删除元素。
数组/链表实现栈:下标top/head=-1
数组/链表实现队列:初始都指向头a[0],出队front后移,入队rear后移
应用实例:栈帧(栈地址从高到低扩展)[用户栈和内核栈(中断切换)]
10. 二叉树的顺序存储和链式存储数据结构
11. 二叉树的遍历方式(区别在于根的先后,采用递归进行访问)
前序遍历(根左右),中序遍历(左根右),后序遍历(左右根),层次遍历(使用队列,先访问根节点,若节点左右孩子指针非空则入队,以此类推)。
12. 二叉树推导遍历结果
前中后取其二,必须包含中序遍历才能唯一确定一棵二叉树。
13. 二叉查找树(二叉排序树)查找插入删除
左子树<根<右子树。
删除分有012个叶子节点的情况:
0则直接使其父节点对应指针指向空;
1则使其父节点对应指针指向其子节点;
2则需要位置变换,用其右子树中最小节点替换当前节点。