第二章、线性表
1、线性表顺序存储结构和链式存储结构的特点
(1)顺序存储时,相连数据元素的存放地址也相邻,逻辑与物理统一;内存中可用的存储单元都是连续的
优点:存储密度大,易于查找和修改
缺点:插入和删除元素时不方便,存储空间利用率低,预先分配空间可能造成浪费。
(2)链式存储时,相邻数据元素可以随意存放,储存空间占两部分,一部分存放数值,一部分存放指针,表示该结点与其他结点的关系。
优点:插入或者删除很方便,使用灵活,
缺点,存储密度小,查找和修改需要遍历
(3)使用情况
(4)顺序表适宜于做查找这样的静态操作;链表宜于做插入、删除这样的动态操作。 若线性表的长度变化不大,且其主要操作是查找,则采用顺序表;
若线性表的长度变化较大,且其主要操作是插入、删除操作,则采用链表。
顺序表的存储空间是静态分配的
链表的存储空间是动态分配的
基础知识题
首元结点是指链表存储线性表中第一个数据结构a1的结点‘
头结点是首元结点前的结点,数据域不储存数据,指针域指向首元结点’
头指针是指向链表中第一个结点的指针,或为头节点或为首元结点
2、(1)在顺序表中插入或者删除元素,需要平均移动n/2个元素,具体移动的元素个数与插入或者删除的位置有关
(2)顺序表中,各元素物理位置上彼此相邻,链表中并不一定相邻
(3)链表中,除了首元结点外,任一节点的位置由指针指示。
(4)在单链表中设置头结点的作用是插入或者删除首元结点时不需要特殊处
理。
第三章、栈与队列
1\\循环队列头、尾指针的变化规律;队空与队满的判断条件Q.near 队尾 Q.front 队首
If((Q.near+1)%SIZE ==Q.front) 队列满
Q.base[Q.rear]=e
Q.rear=(Q.rear+1)%SIZE
2\\入栈和出栈操作的过程和规律
后进先出
3\\作业中的基础知识题
3.2
(1)线性表
用一组地址连续的储存单元依次存储线性表的数据元素。以元素在计算机内“物理位置相邻”来表示线性表中数据元素之间的逻辑关系。只要确定了数据元素的起始位置,就可随机地访问数据元素。但是这种表示方法不便于插入和删除元素,每插入或删除一个元素,都要移动插入或删除位置之后的数据元素在连续储存单元中的位置,而且除了重新分配内存,否则在程序运行过程中不能动态地增加储存单元的数量。
(2)栈
和线性表相似,栈也有两种储存方式,顺序栈和链式栈。
顺序栈的实现在于使用了数组这个基本数据结构,数组中的元素在内存中的存储位置是连续的,且编译器要求我们在编译期就要确定数组的大小,这样对内存的使用效率并不高,一来无法避免因数组空间用光而引起的溢出问题,二在系统将内存分配给数组后,则这些内存对于其他任务就不可用;而链栈使用了链表来实现栈,链表中的元素存储在不连续的地址,由于是动态申请内存,所以我们可以以非常小的内存空间开始,另外当某个项不使用时也可将内存返还给系统。
第六章 树和二叉树
1\\二叉树的性质
(1)第i层至多有2的(i-1)次方个结点
(2)深度为k的二叉树结点最大为2的k次方-1
(3)终端结点为n个,度为2的结点数为k个,则n=k+1
(4)具有n个结点的完全二叉树深度为[log₂n]+1
(5)左右结点和根结点的关系
2\\二叉树的另外两种存储方式
顺序存储结构,链式存储结构
3\\给定中序+先序(后序),画出二叉树
中序,左中右,先中序左子树,再访问根节点,再中序右子树
先序,中左右,先访问根结点,再先序访问左子树,再先序访问右子树
后序,左右中,后序左子树,后序右子树,再访问根结点
1.先在先序子序列中找到当前子树的根节点,即先序子序列的第一个节点是当前子树根节点
2.在中序子序列中找到当前根节点的位置,并返回下标
3.根据中序子序列中的当前子树根节点的位置,得到子树的左子树和右子树
4.根据当前子树的左右子树,分别得到其在先序子序列和中序子序列中开始索引和结束索引
5.根据得到的索引,判断左右子树是否为空,如果不为空则返回第一步继续执行,如果为空直接返回。
后序同理
4\\二叉树与森林之间的相互转换
使用左孩子右兄弟法
5\\哈夫曼树 6\\基本知识点
6.19 树与二叉树之间的转换 左孩子右兄弟法
第七章 图
1、图的相关概念
顶点,弧,弧尾,弧头
无向图,有向图,完全图,有向完全图,稀疏图,稠密图
连通分量,强连通分量 最小生成树(prim或者kruskal)
2、图的存储结构
邻接表,邻接矩阵,逆邻接表
3、图的遍历
深度,就是一直搜下去,找与之邻接的顶点
广度,将层数一样的搜出来,在接着搜下一层
4、求有向图的拓扑排序序列
在图中找到一个没有前驱的顶点并将其输出;在图中删除该顶点和所有以它为尾的弧
第九章 查找
1、静态查找
1.顺序查找,就是按index(序号)查找;2.折半查找,二分;3.分块查找,构造索引,分块中最大值/最小值为索引。
2、哈希函数构造方法
1.直接定址;2.数字分析(不重要);3.平方取中;4.除留余数5.折叠6.随机数
3、哈希构造时处理矛盾的方法
1.开放定址,其实就是对矛盾的数值根据一定的计算重新找到一个未被用过的地址
2.再哈希,在产生矛盾时计算另一个构造哈希函数的方法
3.链地址,感觉有点像图的邻接表存储的模型,只是模型
4.公共溢出区,再开出一块空间,放矛盾的值
4、基础知识点
9.21 根据首字母排序 开放寻址法,使用线性探测就可以
第十章 内部排序
1、排序的方法
(1)插入排序
1.直接插入排序
关键步骤 将需要插入的数字,从它原先序列的前一个位置开始向前比较
2. 希尔排序
d[1]=k 首先将序列分成k个组
3.起泡排序,冒泡
4.快速排序
开始,从j开始比较,找到小的,交换,并从i开始比较;同理,又从j开始比较,直到i j重合
5.简单选择排序
从 后n-i+1的几率中找出最小值,与第i个记录进行交换
6.堆排序
主要是了解堆建立的过程
在输出堆顶元素后,将最末位的元素交换到堆顶,再进行down操作
7.归并排序
将一维数组中相邻的两个有序序列归并成一个有序序列
开始,一个元素即为一个有序序列,所以第一次排序为两两元素结合
8.基数排序
因篇幅问题不能全部显示,请点此查看更多更全内容