一、绪论
1.算法的时间复杂度取决于问题的规模和待处理数据的初态
2.计算机算法必须具备:有穷性、确定性、可行性,
3.从逻辑上把数据结构分为线性结构和非线性结构两大类
4.与数据的存储结构无关的术语:栈
5.多型数据类型:多型就是数据元素的类型不确定,比如字符串。
6.单链表属于存储结构
7.抽象数据类型的定义只取决于他的一组逻辑特性,而与其在计算机内部的表现形式无关,即不论其内部结构如何变化,只要他的数学特性不变,都不影响其外部使用
二、线性表
1.存储密度大是顺序存储结构的一个优点
2.某线性表中最常用的操作是在最后一个元素之后插入一个元素和删除第一个元素,则采用仅有尾指针的单循环链表存储方式最节省运算时间
3.设一个链表最常用的操作是在末尾插入结点和删除尾结点,则选用带头结点的双循环链表最节省时间。
4.线性表既可以用顺序存储结构表示也可以用链式存储结构表示
5.根据指针的连接方式,链表可以分为动态链表和静态链表
6.数据元素及直接后继的存储位置(地址)组成一个数据元素的存储结构,称为:节点
7.头结点:在单链表开始结点之前增设一个类型相同的结点
三、栈和队列
1.、栈是实现过程和函数等子程序所必需的结构
2.采用链接方式存储的队列,在进行删除操作时,链头链尾指针都可能需要修改
3.队列逻辑上是一个下端和上端既能增加又能减少的线性表。//这句话是对的,因为这里说的是逻辑上而不是实质上,即可以当作双向队列处理。
4.消除递归不一定需要使用栈//比如尾递归的消除
5.在循环队列下,通常采用“牺牲一个存储单元”或“作标记”的方法解决“队满”和“队空”的判定问题。
6.由于栈只在栈顶操作,所以链栈通常不设头结点
7.一个函数在结束本函数之前,直接或间接调用函数自身,称为递归。
四、串
1.串是一种数据元素和操作都特殊的线性表
五、数组与广义表
1.b对角矩阵的b条对角线,在主对角线上方和下方各有b/2条对角线(为叙述方便,下面设a=b/2)。从第1行至第a行,每行上的元素数依次是a+1,a+2,...,b-2,b-1,最后的a行上的元素个数是 b-1,b-2,...,a+1。中间的(n-2a )行,每行元素个数都是b。故b条对角线上元素个数为 (n-2a)b+a*(a+b)。存放在一维数组V[1..nb-a(b-a)]中,其下标k与元素在二维数组中下标i和j的关系为。。。
2.数组是具有相同性质的数据元素的集合,包括元素的值与下标
3.稀疏矩阵压缩存储后,必会失去随机存取功能。
4.对长度为无穷大的广义表,由于存储空间的限制,不能在计算机中实现。
六、树和二叉树
1.树的根节点是有且只有一个,二叉树为0或1个
2.一棵哈夫曼树的带权路径长度等于其中所有分支结点的权值之和。//这句话是错的,因为这里说的是分支结点而不是叶子结点
3.在中序线索二叉树中,每一非空的线索均指向其祖先结点。(没弄懂)
4.若度为m的哈夫曼树中,其叶结点个数为n,则非叶结点的个数为(n-1)/(m-1)向下取整
5.一棵二叉树高度为h,所有结点的度或为0,或为2,则这棵二叉树最少有2h-1结点(斜着向下)
6.. 利用二叉链表存储树,则根结点的右指针是空的(因为二叉链表存储的是,左孩子右兄弟,而根结点没有兄弟)
7.若二叉树采用二叉链表存储结构,要交换其所有分支结点左、右子树的位置,利用后序遍历方法最合适。
8.树(不是二叉树)的存储形式,有3中常用的存储结构:①双亲表示法;②孩子表示法;③孩子兄弟表示法
树的存储方式有多种,既可以采用顺序存储,也可以采用链式存储,无“顺序存储表示法”这一说法
9.哈夫曼树(最优二叉树)可以成为二叉树......
10.左子树为空的二叉树的根结点的左线索为空(无前驱),先序序列的最后结点的右线索为空(无后继),共2个空链域。
11.一棵左右子树均不空的二叉树在先序线索化后,其中空的链域的个数是1个
12.若X是二叉中序线索树中一个有左孩子的结点,且X不为根,则x的前驱为x左子树的最右结点
12.1若有一个结点是它的双亲的左子女,且它的双亲有右子女,则这个结点在后序遍历中的后继结点是其双亲右子树最靠左的叶子结点
12.2后序线索树中结点的后继(根结点无后继),要么是其右线索(当结点的rtag=1时),要么是其双亲结点右子树中最左下的叶子结点。对中序线索二叉树某结点,若其左标记等于1,则左子女为线索,指向直接前驱;否则,其前驱是其左子树上按中序遍历的最后一个结点。
13. 后序线索树 仍然需要栈的支持
14..二叉树在线索后,仍不能有效求解的问题是后序线索树求后序后继
先序遍历(中左右)、中序遍历(左中右)的最后访问的节点都是左或右叶节点,叶节点是没有子树的,所以两个指针域空出来了,可以存放线索指针。但是后续遍历(左右中),最后访问的是子树的根节点,而子树根节点的两个指针域都指向子树了,所以不能空出来存放线索信息
15.设F是一个森林,B是由F变换得的二叉树。若F中有n个非终端结点,则B中右指针域为空的结点有n+1个
16.有向树/有序树/二叉树。。。
17.哈夫曼树父结点上出现的不是关键字的值,而是关键字出现的频率
18.最优二叉树(哈夫曼树)、最优查找树均为平均查找路径长度最小的树,其中对最优二叉树,n表示叶结点数,对最优查找树,n表示结点数,构造这两种树均需要n个关键字的查找概率表)
19.在中序线索二叉树中,每一非空的线索均指向其祖先结点
20.含有n个结点的满二叉树其叶子结点有(n+1)/2个,非叶子结点有(n-1)/2个
21.中缀表达式转前缀或后缀,对中缀表达式按照运算优先级加括号,然后将运算符移到括号前面,去掉括号即前缀表达式/反之则为后缀表达式
21.1计算后缀表达时,不需要进行运算符的优先次序的比较,只需依次计算即可
22.一棵算术表达式树,可以用后序遍历得到后缀表达式,再对表达式进行求值
23.对m个权值,建k叉树,若(m-1)%(k-1)=0,则不需要加“虚权值”,否则,第一次归并时需(m-1)%(k-1)+1个权值归并。
七、图
1.n个顶点的强连通图最少有n条边,比如一个环
1.1n个顶点的连通图最少有n-1条边,比如一个点/一条线
2.BFS树的高度小于或不等于DFS树的高度
3.1)普里姆算法的时间复杂度为O(n2),与网中的边无关,因此适用于求边稠密的网的生成树。
2)克鲁斯卡尔算法恰恰相反,他的时间复杂度为O(eloge)(e为网中的边数),因此它相对于普里姆算法而言,适合于求边稀疏的网的最小生成树。
4.对于含有n个结点的带权连通图,它的最小生成树是指图中任意一个由n个顶点构成的权值之和最小的连通子图
5.用DFS遍历一个无环有向图,并在DFS算法退栈返回时打印相应的顶点,则输出的顶点序列是逆拓扑有序
6.当各边上的权值均相等时,BFS算法可用来解决单源最短路径问题。
7.一个n个结点的图,最少有1个连通分量,最多有n个(不含有边的时候)
8.邻接多重表适合用来存储稀疏无向图
9.深度优先遍历与拓扑排序可以用来判断图是否有环
10.一个事件的最迟开始时间为以该事件为尾的弧的活动最迟完成时间与该活动的持续时间的差
11..树中的结点和图中的顶点就是指数据结构中的数据元素
12.在n个结点的无向图中,若边数大于n-1,则该图必是连通图。(这句话是错的,可能是若干连通分量)
13.有向图的邻接表和逆邻接表中结点的个数一定是相等的
14.pirm算法中,边的权不允许没负数
15.既使有向无环图的拓扑序列唯一,也不能唯一确定该图(这句话是错的,但是很迷...)
16.对一个AOV网,从源点到终点的路径最长的路径称作关键路径(这句话是错的,aov网没有这个说法)
17.能求出关键路径的AOE网一定是有向无环图
18.判断一个无向图是一棵树的条件是有n个顶点和n-1条边的无向连通图
19.一个图的生成树是图的极小连通子图
20.连通图一定指的是无向图,有向图称为强连通图
21.所谓图的遍历,实际上指的是查找顶点的邻接点的过程
21.1BFS/DFS的差异体现在访问顶点的先后顺序,体现在数据结构上,则是队列和栈
22.弱连通有向图指把有向图看作无向图时,仍是连通的
23.二部图的邻接矩阵是一个分块对称矩阵
24.稀疏矩阵的定义是非零个数远小于该矩阵元素个数,且分布无规律
25.如何对有向图中的顶点号重新安排可使得该图的邻接矩阵中所有的1都集中到对角线以上(按照出度排序)
26.对图进行不同方式遍历得到的遍历结果不同的原因:开始遍历的顶点不同;存储结构不同;在邻接表情况下邻接点的顺序不同
27.在有相同权值的条件下,pirm/kruskal算法会生成不同的MST
28.AOE网的始点是入度为零的顶点,该顶点所代表的事件无任何先决条件,可首先开始。终点是出度为零的顶点,表示一项工程的结束。正常的AOE网只有一个始点和一个终点。
八、查找:
1.在各种查找方法中,平均查找长度与结点个数n无关的查法方法是哈希表查找法
2..哈希函数构造的原则是:它的函数值应以同等概率的取其值域的每一个值。
2.1采用直接定址法构造的哈希函数一定不会发生冲突
3.二次探测再散列,探测的步长是一个正负平方
4.评价哈希函数的好坏主要看:能否将关键字均匀影射到哈希空间上,有无好的解决冲突的方法,计算哈希函数是否简单高效
5.对大小均为n的有序表和无序表分别进行顺序查找,在等概率查找的情况下,对于查找失败,它们的平均查找长度是不相同的 ,对于查找成功,他们的平均查找长度是相同的
6.B-树的根结点中的数据(应该是关键字)是有序的
7.B树只适合随机检索,B+树同时支持随机检索和顺序检索;
8.采用链地址法/再哈希法解决冲突,不易产生聚集
9.平衡二叉树本质上是二叉排序树,但是完全二叉树虽然平衡因子满足平衡二叉树的要求,但是他未必是排序树
10.B-树中所有结点的平衡因子都为零
10.1B-树的关键字都在叶子结点中
11.采用线性探测法处理散列时的冲突,当从哈希表删除一个记录时,不应将这个记录的所在位置置空,因为这会影响以后的查找。
12.用分离的同义词和结合的同义词解决碰撞的方法均属于链地址法
13.散列表的关键字查找,就是计算其mod值,然后根据情况依次比较
14.在B-树中查找关键字从根结点开始,从根往下查找结点,然后在结点内查找关键字,得出查找成功与否的结论。B+树的非终端结点是索引部分,其查找从根开始,从根往下查到关键字后,要继续查到最下层结点,得到查找成功与否的结论。另外,B+树还可以在最下层从最小关键字开始,从左往右进行顺序查找,B-树则不能作顺序查找。
15.m阶的B+树和B-树主要区别有三:(1)有n棵子树的结点中含有n(B-树中n-1)个关键字;(2)B+树叶子结点包含了全部关键字信息,及指向含关键字记录的指针,且叶子结点本身依关键字大小自小到大顺序链接;(3)B+树的非终端结点可以看成是索引部分,结点中只含其子树(根结点)中最大(或最小)关键字。B+树的查找既可以顺序查找,也可以随机查找,B-只能顺序查找。
16.B-树中叶子结点数s与关键字数n的关系式:s=n+1
17. 满二叉检索树符合B树定义,B树的插入和删除算法不适用于满二叉检索树,满二叉树的插入和删除操作都破坏了多路平衡查找树叶子结点都在同一层上的条件
九、排序
1.一个堆是一棵完全二叉树
2.若要求尽可能快地对序列进行稳定的排序,则应该选归并排序
4在初始序列已基本有序(除去n个元素中的某k个元素后即呈有序,k< 5.链接:https://www.nowcoder.com/questionTerminal/cfae9292fe3c41e392f9522a0857b9eb 5.1、总排序趟数与初始状态无关的有:(除了快速排序和冒泡,其他都是) 5.2、算法复杂度与初始状态无关的有:堆排序、归并排序、选择排序、基数排序。 5.3、元素总比较次数与初始状态无关的有:选择排序、基数排序/归并排序/折半排序 5.4、元素总移动次数与初始状态无关的有:归并排序、基数排序。 6.采用败者树进行k路平衡归并的外部排序算法,其总的归并效率与k有关 7. 外排序的基本操作过程是生成初始有序归并段与归并,而提高排序速度很重要的是减少归并趟数,我们将采用增加归并路数和减少初始归并段个数方法来提高排序速度。 8.对于有n个有序的关键字,缓冲区大小为m,可以产生n/m(向上取整)个初始归并段
来源:牛客网