这份PDF文档是华南理工大学为《数据结构》课程编写的期末复习资料,包含了重要的知识点总结、算法解析和习题解答,旨在帮助学生系统地准备考试。
在《数据结构》的学习过程中,我们会接触到算法、存储结构以及时间复杂度等多个核心知识点。根据提供的复习资料,我将对这些关键点进行详细解释。
一、选择题解析
1. 在顺序表中插入一个新元素时,平均需要移动的元素个数计算方法为:
(n+1)/2 = (64/2) + 0.5 = 32 + 0.5 = 32.5。但由于问题中的示例是基于n=127的情况(即(128-1)/2),所以平均移动的元素个数为63.5,因此选择B。
2. 对于二维数组在内存中以行优先顺序存储的情形,假设每个单元占一个字节,则A[3][3]的地址计算方式如下:
A[0][0] + (行数*列宽+列号) = 446 + (3 * 4 + 3) = 709。因此选择C。
3. 在有序顺序表中进行搜索,平均长度为(最低位置+最高位置)/2。对于255个元素的序列来说,其平均查找长度为(1+255)/2=128,所以选择A。
4. 二叉搜索树包含五个节点时可能形成的结构数量可以通过卡特兰数计算得出:C(n) = C(9, 4)/(n + 1),其中n等于该问题中的元素个数减一(即四个),因此有C(9, 4)/5=252/6=42,故选择B。
5. 连通图至少需要N-1条边才能保证连通性,所以答案是A.N-1。
6. 函数重载要求相同函数名但参数类型、数量或顺序不同。因此正确选项为A.
7. 引用是指在调用时传递的是实参的地址而不是其值本身,这使得通过形参可以直接修改实际变量的内容,所以答案是B引用。
8. 由于程序采用了双重循环结构,则时间复杂度应为O(m*n),故选C.O(m*n)。
9. 对于递归函数而言,每次调用都会进行n次乘法运算。因此该算法的时间复杂度为O(n!),选择D.
10. 在单链表中插入结点*s到*q和*p之间需要修改q的next指针指向s,并且让s的next指针指向p,故选B。
11. 若要删除结点*p之后的第一个元素,则需将该节点链接至其后继者的后续节点上。因此选择A.
12. 栈遵循LIFO原则,所有插入和移除操作都在栈顶完成,所以答案是A.
13. 当数字按顺序进入栈中时(例如:1、2、3),不可能出现的出栈序列之一为3, 1, 2。因此选择D。
14. 广义表A(a)中的尾部为空列表,因为没有其它元素可作为后续项了,故选C.
15. E(a,(b,c))表示一个线性广义表,因为它除了第一个元素除外的所有其他部分都不包含子表。因此选择A。
16. 折半搜索与二叉树的搜索效率可能不相同;前者适用于已排序的数据集,而后者则应用于任意结构化的数据集合中进行查找操作,故选C.
17. 在有序列表上执行折半搜索算法时,元素的平均查找长度为O(log2n),所以选择C。
18. 图的深度优先遍历类似于二叉树中的前序遍历;两者都是首先访问根节点然后递归地处理子节点。因此答案是B.
19. 该排序方法被定义为选择排序,因为每次操作都会从无组织的数据集中挑选出最小或最大的元素进行排列,故选B。
20. 图的广度优先遍历类似于二叉树中的层次遍历;两者都按照层级顺序访问节点。因此答案是D.
二、填空题解析
1. 算法需要满足输入输出条件,并且必须具有确定性、有限性和可执行性的特征。
2. 对于一棵所有结点度数之和等于边数加一的树,若其总度为3,则可以推断出该树中存在两个三叉节点。因此填空处应填写2.
3. 队列是一种FIFO结构;插入操作发生在队尾而删除则在队首进行。
4. 当使用数组实现栈时,如果top变量等于容器大小n表示已满,则其为空的条件为top==0.
5. 快速排序算法将依据