1、数据结构的定义
数据结构是指数据元素的集合及元素间的相互作用和构造方法。 元素之间的相互关系是数据的逻辑结构,数据元素及元素之间关系的存储称为物理结构(或存储结构)。
数据结构按照逻辑关系的不同分为线性结构和非线性结构两大类。线性结构主要就是线性表(顺序表、单链表)、栈、队列、数组等,而非线性结构主要就是树结构、图结构。
算法与数据结构密切相关,数据结构是算法设计的基础,设计合理的数据结构可使算法简单而高效。
2、数组
3、稀疏矩阵
4、线性表
4.1 线性表的定义
单链表的插入操作:
s->next=p->next;
p->next=s;
单链表的删除操作:
q=p->next;
p->next=q->next;
(上面两句等价于:p->next=p->next->next)
4.2 顺序存储与链式存储对比
4.3 队列与栈
分析:
A选项:e1、e2、e3、e4依次从左端入队,就得到了e4、e3、e2、e1这样的队列,此时依次出队即可得到A选项的结果。B选项:e1、e2先从左端入队,之后e3从右端入队,最后e4从左端入队,就能得到e4、e2、e1、e3的队列,满足B选项。
C选项:e1、e2先从右端入队,之后e3、e4再从左端入队,就可以得到e4、e3、e1、e2的队列,即符合C选项。
D选项:仔细分析这个队列的入队出队规则,我们发现e1和e2无论如何都是相邻的元素,所以无法得到D选项这样的队列。
4.4 广义表
5、树与二叉树
5.1 基本概念
5.2 二叉树的重要特性
5.3 二叉树的遍历
对于上面的二叉树它的先序、中序、后序以及层次遍历:
-
①先序遍历:采用DLR(根左右),得到的结果是:
1 24578 36
。 -
②中序遍历:采用LDR(左根右),得到的结果是:
42785 1 36
。 -
③后序遍历:采用LRD(左右根),得到的结果是:
48752 63 1
。 -
④层次遍历:依次获取每层的结点,得到的结果是:
1 23 456 7 8
。
要想唯一确定一棵二叉树,必须要有中序遍历的序列结果!!!
5.4 反向构造二叉树
5.5 树转二叉树
5.6 查找二叉树(排序二叉树)
5.7 最优二叉树(哈夫曼树)
哈夫曼树的目标就是构造最短的带权路径长度!!!
5.8 线索二叉树
若n个结点的二叉树采用二叉链表做存储结构,则链表中必然有 n+1 个空指针域。
5.9 平衡二叉树
平衡二叉树的平衡因子只能为±1或0
6、图
6.1 基本概念
6.2 图的存储
邻接矩阵
邻接表
6.3 图的遍历
6.4 拓扑排序
6.5 最小生成树
普里姆算法(以顶点为中心,适合稠密图)
克鲁斯卡尔算法(以边为中心,适合稀疏图)
注意:不能产生环路
7、算法
7.1 算法的特性
7.2 算法的时间复杂度和空间复杂度
8、查找与排序
8.1 查找
8.1.1 顺序查找与二分查找
例题,使用二分查找关键字17,具体过程如下:
①(1+12)/ 2 = 6(向下取整),所以定位到数组下标为6的元素的位置,比较得17<18,可知关键字在前半部分[1,5]。
②(1+5)/ 2 =3(向下取整),所以定位到数组下标为3的元素的位置,比较得17>10,可知关键字在后半部分[4,5]。
③(4+5)/ 2 =4(向下取整),所以定位到数组下标为4的元素的位置,比较得17>16,可知关键字在后半部分[5,5]。
④此时二分查找的区间只剩一个元素,即第五个元素17,比较得17=17,所以查找成功。(一共进行了4次比较)
二分查找在查找成功时,关键字得比较次数最多为
log2^n(向下取整) + 1
:。时间复杂度为O(log2^n )
。
8.1.2 散列表
散列表冲突的解决方法
8.2 排序
8.2.1 直接插入排序
8.2.2 希尔排序
8.2.3 直接选择排序
8.2.4 堆排序