数据元素是数据的最小单位。F
数据元素是数据的基本单位。
数据的逻辑结构是指数据的各数据项之间的逻辑关系。F
逻辑结构就是数据元素间的逻辑关系,而不是数据元素内部的数据项之间的关系。
数据结构概念包括数据之间的逻辑结构、数据在计算机中的存储方式和数据的运算三个方面。T
数据元素可以由类型互不相同的数据项构成。T
数据的逻辑结构说明数据元素之间的顺序关系,它依赖于计算机的存储结构。F
逻辑结构可用不同的存储结构实现,“它依赖于计算机的存储结构”完全说不通。
2^N和N^N具有相同的增长速度。F
算法分析的两个主要方面是时间复杂度和空间复杂度的分析。T
n! is O(n^n ). T
O(N^2) is the same as O(1 + 2 + 3 + ? +N). T
若某线性表最常用的操作是存取任一指定序号的元素和在最后进行插入和删除运算,则利用顺序表存储最节省时间。T
对于顺序存储的长度为N的线性表,访问结点和增加结点的时间复杂度分别对应为O(1)和O(N)。T
对于顺序存储的长度为N的线性表,删除第一个元素和插入最后一个元素的时间复杂度分别对应为O(1)和O(N)。F
删除第一个元素为O(n),删除最后一个元素为O(1)。
(neuDS)在顺序表中逻辑上相邻的元素,其对应的物理位置也是相邻的。T
(neuDS)所谓随机存取,就是通过首地址和元素的位序号值可以在O(1)的时间内找到指定的元素。T
(neuDS)顺序存储的线性表不支持随机存取。F
顺序存储结构的地址在内存中是连续的所以可以通过计算地址实现随机存取,与此相对链式存储结构的存储地址不一定连续,只能通过结点的指针顺序存取。
(neuDS)在顺序表上进行插入、删除操作时需要移动元素的个数与待插入或待删除元素的位置无关。F
顺序表上进行删除操作时与待删除元素位置有关。
(neuDS)顺序存储方式只能用于存储线性结构。F
顺序存储方式不仅能用于存储线性结构,还可以用来存放非线性结构,例如完全二叉树是属于非线性结构,但其最佳存储方式是顺序存储方式。
在具有N个结点的单链表中,访问结点和增加结点的时间复杂度分别对应为O(1)和O(N)。F
访问结点和增加结点的时间复杂度分别对应为O(N)和O(1)。
若用链表来表示一个线性表,则表中元素的地址一定是连续的。F
顺序表中元素地址一定连续,而链表不一定。
将N个数据按照从小到大顺序组织存放在一个单向链表中。如果采用二分查找,那么查找的平均时间复杂度是O(logN)。F
二分查找不可以用链表存储。
二叉树通常有顺序存储结构和链式存储结构。T
在含有n个结点的树中,边数只能是n - 1条。T
完全二叉树中,若一个结点没有左孩子,则它必是树叶。T
一棵有n个结点的二叉树,从上至下,从左到右用自然数依次编号,则编号为i的结点的左儿子的编号为2i(2i < n),右儿子的编号是2i + 1(2i + 1 < n)。F
对完全二叉树适用。
用树的前序遍历和中序遍历可以导出树的后序遍历。F
二叉树的前序遍历和中序遍历可以导出树的后序遍历。
二叉树只能用二叉链表表示。 F
二叉树是逻辑上的一种结构,要具体存储,自然也有链式存储和顺序存储,链式存储一般就是所谓的基于二叉链表存储(binary linked list),其实也可以用三叉链表来存二叉树(binary tree)。不过我们一般习惯的链式存储都是二叉链表,这样存储更加直观。
树形结构中元素之间存在一个对多个的关系。T
度为二的树就是二叉树。 F
二叉树就是度不超过2的树,其每个结点最多有两个子结点 2。
某二叉树的后序和中序遍历序列正好一样,则该二叉树中的任何结点一定都无右孩子。T
某二叉树的前序和中序遍历序列正好一样,则该二叉树中的任何结点一定都无右孩子。F
某二叉树的前序和中序遍历序列正好一样,则该二叉树中的任何结点一定都无左孩子。
一棵有124个结点的完全二叉树,其叶结点个数是确定的。T
任何二叉搜索树中同一层的结点从左到右是有序的(从小到大)。 T
二叉搜索树的查找和折半查找的时间复杂度相同。 F
只有平衡的二叉搜索树才与折半查找时间复杂度相同。
二叉排序树的后序遍历序列必然是递增的。F
二叉排序树又称“二叉搜索树”,是一种左子树比根结点小,右子树比根结点大的特殊二叉树的形式。
若一搜索树(查找树)是一个有n个结点的完全二叉树,则该树的最大值一定在叶结点上。F
若一搜索树(查找树)是一个有n个结点的完全二叉树,则该树的最小值一定在叶结点上。
若一搜索树(查找树)是一个有n个结点的满二叉树,则该树的最大值一定在叶结点上。
N个结点的二叉排序树有多种,其中树高最小的二叉排序树是最佳的。T
中根遍历二叉查找树所得序列一定是有序序列。 T
二叉排序树的查找效率和二叉排序树的高度有关。T
在二叉排序树中,每个结点的关键字都比左孩子关键字大,比右孩子关键字小。T
任何最小堆的前序遍历结果是有序的(从小到大)。F
任何最小堆中从根结点到任一叶结点路径上的所有结点是有序的(从小到大)。T
对N(≥2)个权值均不相同的字符构造哈夫曼树,则树中任一非叶结点的权值一定不小于下一层任一结点的权值。T
哈夫曼编码是一种最优的前缀码。对一个给定的字符集及其字符频率,其哈夫曼编码不一定是唯一的,但是每个字符的哈夫曼码的长度一定是唯一的。 F
哈夫曼码的长度不是唯一的。
哈夫曼树是带权路径长度最短的树,路径上权值较大的结点离根较近。F
哈夫曼树是带权路径长度最小的树,路径上权值较大的结点离根较近。
无向连通图所有顶点的度之和为偶数。 T
无向连通图边数一定大于顶点个数减1。 F
无向连通图边数大于或等于顶点个数减1。
用邻接表法存储图,占用的存储空间数只与图中结点个数有关,而与边数无关。F
用邻接矩阵法存储图,占用的存储空间数只与图中结点个数有关,而与边数无关。T
在一个有向图中,所有顶点的入度与出度之和等于所有边之和的2倍。T
在任一有向图中,所有顶点的入度之和等于所有顶点的出度之和。T
图的深度优先遍历非递归算法通常采用队列实现,广度优先遍历非递归算法通常采用堆栈实现。F
图的深度优先遍历非递归算法通常采用堆栈实现,广度优先遍历非递归算法通常采用队列实现。
如果无向图G必须进行两次广度优先搜索才能访问其所有顶点,则G中一定有回路。F
如果无向图G必须进行两次广度优先搜索才能访问其所有顶点,则G一定有2个连通分量。
采用邻接表存储的图,其广度优先遍历类似于二叉树的先序遍历。F
图的广度优先遍历即横向优先遍历,类似于二叉树的按层遍历。
若有向图不存在回路,即使不用访问标志位同一结点也不会被访问两次。F
如果一个点的入度大于1的话,就有可能被多次访问
Kruskal 算法是通过每步添加一条边及其相连的顶点到一棵树,从而逐步生成最小生成树。 F
Kruskal 算法是维护一个森林,每一步把两棵树合并成一棵。
Prim 算法是通过每步添加一条边及其相连的顶点到一棵树,从而逐步生成最小生成树。T
对于带权无向图 G = (V, E),M 是 G 的最小生成树,则 M 中任意两点 V1 到 V2 的路径一定是它们之间的最短路径。F
最小生成树只能说明整个路径是最小,并不能说明到单个结点的路径是最小的。
如果 e 是有权无向图 G 唯一的一条最短边,那么边 e 一定会在该图的最小生成树上。T
m阶B树的根结点最多有m棵子树。T
斜堆是用二叉树来实现的一种堆结构。斜堆的优势在于比平衡二叉树有更快的归并能力。其归并、插入、删除最小元操作的最坏时间复杂度都是O(N),而这些操作的摊还时间复杂度都是O(logN)。T
外排序中,给定 1000 个段和 8 条磁带。如果使用简单的 k 路归并,则最少要执行 5 趟(段的生成不算在内)。 T
仅基于比较的算法能得到的最好的“最坏时间复杂度”是O(NlogN)。 T
若一个结点是某二叉树的中序遍历序列的最后一个结点,则它必是该树的前序遍历序列中的最后一个结点。F
前序遍历是DLR,中序遍历是LDR,如果R不存在,这句话的说法是错的。
若一个结点是某二叉树的中序遍历序列的最后一个结点,则它必是该树的前序遍历序列中的最后一个结点。 F
前序遍历是DLR,中序遍历是LDR,如果R不存在,这句话的说法是错的。
在一棵二叉搜索树上查找63,序列39、101、25、80、70、59、63是一种可能的查找时的结点值比较序列。F
39后是101比39大,后面所有元素应该比39大,出现25矛盾。
在散列表中,所谓同义词就是具有相同散列地址的两个元素。T
在散列表中,所谓同义词就是被不同散列函数映射到同一地址的两个元素。 F
具有相同的函数值的关键字称为同义词。
采用平方探测冲突解决策略(hi(k)=(H(k)+i2)%11, 注意:不是±i2),将一批散列值均等于2的对象连续插入一个大小为11的散列表中,那么第4个对象一定位于下标为0的位置。T
若用平方探测法解决冲突,则插入新元素时,若散列表容量为质数,插入就一定可以成功。F
插入不一定成功,可能会超出表容量,插入失败。
将M个元素存入用长度为S的数组表示的散列表,则该表的装填因子为M / S。T
任何AVL树的中序遍历结果是有序的(从小到大)。T
对N个记录进行归并排序,归并趟数的数量级是O(NlogN)。F
对N个记录进行归并排序,归并趟数的数量级是O(log2N)。
对N个记录进行堆排序,需要的额外空间为O(N)。F
辅助空间是O(1)。
对N个记录进行简单选择排序,比较次数和移动次数分别为O(N^2)和O(N)。T
对N个记录进行快速排序,在最坏的情况下,其时间复杂度是O(NlogN)。 F
对N个记录进行快速排序,在最坏的情况下,其时间复杂度是O(N^2)。
希尔排序是稳定的算法。 F
冒泡排序、插入排序、归并排序和基数排序是稳定的排序算法。
选择排序、快速排序、希尔排序、堆排序不是稳定的排序算法。
对N个不同的数据采用冒泡排序进行从大到小的排序,当元素基本有序时交换元素次数肯定最多。 F
当元素基本有序时,交换元素元素肯定较少,冒泡和直接插入排序都会较少。
某二叉树的前序和中序遍历序列正好一样,则该二叉树中的任何结点一定都无左孩子。 T
某二叉树的后序和中序遍历序列正好一样,则该二叉树中的任何结点一定都无左孩子。F
后序遍历是LRD,中序遍历是LDR,由此可知该二叉树中的任何结点一定都无右孩子。
若一个栈的输入序列为1,2,3,…,N,输出序列的第一个元素是i,则第j个输出元素是j−i−1。 F
第j个输出元素是不确定的,因为这题并没有说明要一次进完再弹出,所以是不确定的。
已知一棵二叉树的先序遍历结果是ABC, 则CAB不可能是中序遍历结果。 T
将1、2、3、4、5、6顺序插入初始为空的AVL树中,当完成这6个元素的插入后,该AVL树的先序遍历结果是:4、2、1、3、5、6。 T
通过对堆栈S操作:Push(S,1), Push(S,2), Pop(S), Push(S,3), Pop(S), Pop(S)。输出的序列为:123。 F
输出序列为:231.
若一个栈的输入序列为{1, 2, 3, 4, 5},则不可能得到{3, 4, 1, 2, 5}这样的出栈序列。 T
栈和队列的存储方式,既可以是顺序方式,也可以是链式方式。 T
栈底元素是不能删除的元素。 F
顺序栈中元素值的大小是有序的。 F
在n个元素连续进栈以后,它们的出栈顺序和进栈顺序一定正好相反。 T
栈顶元素和栈底元素有可能是冋一个元素。 T
栈是一种特殊的线性表,它的插入和删除操作都是在表的同一端进行。 T
链栈的插入在栈顶,删除在栈底。 F
链式栈本质是链表,只是用链表实现栈特性。
一般操作有:创建栈、栈空、清除、入栈、出栈、释放、取栈顶。
插入删除都是在表头进行,所以表头是栈顶(头指针即栈顶指针),表尾是栈底。
所谓“循环队列”是指用单向循环链表或者循环数组表示的队列。 F
循环队列是一个抽象的数据结构,而单向循环链表和循环数组都是具体的实现方法并不是数据结构的本身。
在用数组表示的循环队列中,front值一定小于等于rear值。 F
在用数组表示的循环队列中,front值不一定小于等于rear值。在一个循环队列中,如果已经有若干个元素出队了,而且入队元素的总个数超过了数组的大小个数,是会发生front大于raer这种现象的。
循环队列执行出队操作时会引起大量元素的移动。 F
出队对队首指针进行操作就行
队列中允许插入的一端叫队头,允许删除的一端叫队尾。 F
允许插入的一端叫队尾(rear),允许删除的一端叫队头(front)
队列结构的顺序存储会产生假溢出现象。 T