1. 逻辑结构:集合(CH6 查找表),线性结构(CH2 线性表 、CH3 栈、队列、数组),树形结构(CH4 树和二叉树),图结构(CH5 图)
2. 存储结构:顺序存储、链式存储(代码:初始化、插入、删除)、索引存储、散列存储。
3. 算法:规定求解给定问题所需处理步骤及其执行顺序。
4. 算法的性质:正确性、易读性、时空性、健壮性。
5. 算法的时间复杂度是算法输入规模的函数。
6. 数据、数据元素(线性表中特性相同)、数据项(域,字段)
1. 单链表的初始化
LinkList InitateLinkList( )
//建立一个空的单链表
{
// 声明类型
LinkList head;
// 动态创建malloc一个节点,它是头结点
head = malloc(sizeof(Node));
// 设置结点的数据域和指针域
head -> next = NULL;
return head;
}
有些话儿要说:
sizeof(Node)获取和结构体Node空间大小一致的地址空间
扩展:
创建指向节点的指针的语句
eg: p = (LkQueNode *)malloc(sizeof(LKQueNode)) [课本 P86]
获取结构体链队列结点的地址空间大小,动态创建该结构体的一个实例,获取该实例的地址,将地址赋值给p.
链式存储方式在其他复杂的逻辑结构上的运用时(如:队列,栈,图,数) ,创建的是指针。
2. 栈和队列
本质是线性表,表头(栈底和队头,可以不存储数据或者存储公共数据,如:length)。
栈 什么先出? 后进先出
队列 什么先出? 先进先出
3. 假溢出 顺序队列,进一个rear++,出一个front++。
4. 循环队列,牺牲一个存储空间来区分队首和队尾。因为本质是线性表,front指的是表头,表中第一个数据元素的前一个。
rear = (front + CQ.length) % m.
队列空 CQ.rear = CQ.front 队列满 (CQ.rear +1)%m=CQ.front
5. 双向循环链表中插入结点
口诀: 先积极主动向环境介绍自己,再让环境接纳自己。
若 新插入结点是由工作指针 s 所以,开始是 s =... , s = ... , 然后是 ... = s, ...= s.
6. 双向循环链表为空 孤单的头结点抱紧了自己,左手(piror)抱自己,右手(next) 抱自己。
7. 出栈和取栈顶元素的区别 Push(压,入栈),Pop(像 泡泡一样往上冒)
8. 压缩存储
稀疏矩阵,三元组表示法 (i , j , v)
三元组表 ((Ai1,Aj2 , v1),(Ai2 , Aj2 , v2), ... ,( Ain , Ajn , vn))