一、结构体
1、定义
自定义数据类型;任意由程序员构建的新类型。
结构体类型声明: ' . '为结构体成员运算符。
2、结构体变量的定义
struct 类型名 变量 进行的是变量的赋值。
变量的初始化:struct 类型名 变量 = {...,...,...}; 与结构体中声明的成员次序一致。
可部分成员初始化,例如: 其他的未初始化的为0。
3、结构体对齐问题
有意浪费部分内存空间,以提高程序执行效率。
规则:1、结构体按照其最长成员大小对齐,意味着最终的大小必须是最长成员大小的整数倍;
2、结构体成员按照结构体成员声明先后次序依次存放,并且每个成员的首字节放置的位置必须能够整除成员的字节数;
3、如果结构体某个成员的字节数大于CPU的字节数,则最长按照CPU的字节数对齐;
4、用预处理命令#pragma pack(n) 可以强制编译器按照指定的n来对齐,合法的n的数值分别是1、2、4、8、16。
4、结构体作为函数参数传递
通常用指针传参。左边为指针时一般用指向结构体成员运算符" -> "。
结构体数组作为函数参数传递。
数据结构 + 算法 = 程序;输出缓存区:(1)\n (2)fflush(stdout)函数 (3)缓冲区满了。
二、链表
1、链表由若干节点组成。节点包括值域、指针域。链表是在堆区,不连续。
优:删除、插入时算法复杂度为1。
劣:知道首元素地址,只能通过指针域逐个往后推找第i个元素。
有头链表:黄色部分首节点在栈区。