内容总结
1.数组
例题;
一维数组 存储地址计算=起始位置(a)+数组下标(i)*元素所占字节数(len)
二维数组 例题按行存储 a[2][3]=a+(2 * 5+3)*2=a+26
2.稀疏矩阵
大量元素为0的矩阵称为稀疏矩阵
上述例题一般采用代入法,根据A[0,0]在M[1]的位置(数组M下标从1开始),代入排除BC选项
A[1,0]在M[2]的位置,代入A选项为2,选项正确
3.数据结构的定义
数据结构是计算机存储以及组织数据的方式
数据结构按照逻辑关系分为线形和非线性
线性结构:线性表(单链表、顺序表)、栈、队列数组
非线性结构:树结构和图结构
4.线性表
线性表是最基本,最简单,最常用的数据结构,一个线性表是N个具有相同特性的数据元素的有限序列
4.1顺序表和链表
顺序表:基于数组实现的,因为内存地址是连续的。 类名是SequenceList
链表:
双向链表:前一个节点地址+后一个节点地址
循环列表
4.2顺序存储与链式存储对比
4.3队列与栈
①元素a进栈,元素a出栈,元素b进栈,元素b出栈,元素c进栈,元素c出栈,此时得到出栈序列为:abc。
②元素a进栈,元素a出栈,元素b进栈,元素c进栈,元素c出栈,元素b出栈,此时得到出栈序列为:acb。
③元素a进栈,元素b进栈,元素b出栈,元素a出栈,元素c进栈,元素c出栈,此时得到出栈序列为:bac。
④元素a进栈,元素b进栈,元素b出栈,元素c进栈,元素c出栈,元素a出栈,此时得到出栈序列为:bca。
⑤元素a进栈,元素b进栈,元素c进栈,元素c出栈,元素b出栈,元素a出栈,此时得到出栈序列为:cba。
选项D错误
B选项,e1,e2从左端进,e3右端进,e4左端进,得到e4,e2,e1,e3输出序列
4.4广义表
a是一个元素,(b,c)是一个元素,(d,e)是以个元素,长度为3。深度看层数,LS1两层(其中(b,c)和(d,e))算一层。所以深度为2
先取Tail,得到((b,c),(d,e));再取head,得到(b,c);再取head即可得到字母b。即操作序列为:Head(Head(Tail(LS1)))
5.树与二叉树
5.1基本概念
结点的度:当前结点的孩子结点的个数。比如结点2有两个孩子结点4和5,所以结点2的度为2;而结点4和5没有孩子节点,所以度为0;结点3只有一个孩子节点6,所以度为1。
树的度:树中所有结点的度最大的那个。比如上面这棵树中,结点的度最大为2,所以该树的度为2。
叶子结点:没有孩子节点
分支节点:有相应的分支
内部节点:非叶子节点也非根节点。
父结点、子结点、兄弟结 点:1是2和3的父结点,4和5是2的子结点,4和5、2和3称为兄弟结点。
层次:根结点为第一层,之后层数依次加1
5.2二叉树
5.3二叉树遍历
前序遍历(根左右):12457836
中序遍历(左根右):42785136
后序遍历(左右根):48752631
层次遍历:12345678
5.4反序构造二叉树
5.5树转二叉树
树转二叉树规则:孩子结点变左子树结点,兄弟结点变成右孩子结点
5.6查找二叉树
5.6最优二叉树(哈夫曼树)
5.7线索二叉树
前序线索二叉树按照前序序列生成的
5.8平衡二叉树
左边这棵二叉树,结点1和9为叶子节点,无左子树和右子树,所以平衡度为0;结点5的左子树深度为1、右子树深度为0,所以平衡度为1-0=1;结点7的左右子树深度均为2,所以平衡度为2-2=0;这几个结点都满足平衡二叉树的平衡因子只能为±1或0的条件。结点39、73、88的平衡度依次为3、4、5,不满足平衡度只能为±1或0的条件,所以这不是一棵平衡二叉树。
6.图
6.1基本概念
图的存储:
邻接矩阵具有对称性
邻接表
6.2图-拓扑排序
6.3图的最小生成树-普利姆算法
6.4图的最小生成树-克鲁斯卡尔算法
从最短的边选起
7.算法
7.1算法的特型
7.2查找
7.2.1顺序查找
时间复杂度O(n)
7.2.2二分查找
时间复杂度
7.2.3散列表
7.3排序
7.3.1直接插入排序
7.3.2希尔排序
7.3.3直接选择排序
选出最小的元素
7.3.4堆排序
孩子结点大于父节点 小顶堆。反之大顶堆
首先从非叶子结点开始(叶子结点是没有孩子结点)