大工20春9月网考【数据结构】复习资料
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
大连理工大学网络教育学院
2020年春《数据结构》
期末考试复习题
☆注意事项:本复习题满分共:200分。
一、单项选择题
1、在队列中存取数据的原则是()。
A.先进先出B.后进先出
C.先进后出D.随意进出
2、在下列链表中,不能从当前结点出发访问到其余各结点的是()。
A.单链表B.单循环链表
C.双向链表D.双向循环链表
3、在一棵二叉树上第5层的结点数最多为()设树根为第1层。
A.16 B.15 C.8 D.32
4、一棵有124叶子结点的完全二叉树,最多有()个结点。
A.247 B.249 C.248 D.125
5、具有10个叶子结点的二叉树中有()个度为2的结点。
A.8 B.9 C.10 D.11
6、若一棵二叉树的先序遍历序列为abdgcefh,中序遍历的序列为dgbaechf,则后序遍历的结果为()。
A.gdbehfca B.bdgaechf
C.gdbecfha D.gcefhabd
7、对线性表进行顺序查找时,要求线性表的存储结构是()。
A.倒排表B.索引表
C.顺序表或链表D.散列表
8、对于顺序存储的有序表(5,12,20,26,37,42,46,50,64),若采用折半查找,则查找元素26的查找长度为()。
A.2 B.3 C.4 D.5
9、在所有排序方法中,关键字比较的次数与记录的初始排序次序无关的是()。
A.希尔排序B.起泡排序
C.插入排序D.选择排序
10、堆的形状是一棵()。
A.二叉排序树B.满二叉树
C.完全二叉树D.平衡二叉树
11、线性表采用顺序存储结构时,其地址()。
A.必须是连续的B.部分地址必须是连续的
C.一定是不连续的D.连续与否均可以
12、在栈中存取数据的原则是()。
A.先进先出B.后进先出
C.后进后出D.随意进出
13、插入和删除只能在一端进行的线性表,称为()。
A.队列B.循环队列
C.栈D.数组
14、一个基本线性表的第一个元素的存储地址是100,每个元素的长度是2,则第5个元素的地址是()。
A.110 B.108 C.100 D.120
15、算法分析的目的()。
A.找出数据结构的合理性B.研究算法中的输入与输出的关系
C.分析算法的效率以求改进D.分析算法的易懂性和文档性
16、结点前序为xyz的不同二叉树,那么它有()种不同状态。
A.3 B.4 C.5 D.6
17、将一棵有100个结点的完全二叉树从上到下,从左到右依次对结点进行编号,根结点的编号为1,则编号为49的结点的左孩子编号为()。
A.98 B.99 C.50 D.48
18、设高度为h的二叉树上只有度为0和度为2的结点,则此类二叉树中所包含的结点数至少为(),设根结点的所在高度为1。
A.2h B.2h-1
C.2h+1 D.h+1
19、在一个具有n个顶点的无向图中,要连通全部顶点至少需要()条边。
A.n B.n+1
C.n-1 D.n/2
20、存储在磁带上的顺序文件的查找只能用()。
A.顺序查找B.二分查找
C.分块查找D.树表查找
单选题答案
1. A 2. A 3. A 4. C 5. B
6. A 7. C 8. C 9. D 10. C
11. A 12.B 13.C 14.B 15. C
16. C 17.A 18.B 19.C 20. A
二、填空题
1、一个算法有五个特性:_______、_______、_______、有零个或多个输入、有一个或多个输出。
2、栈S在进行出栈操作时首先要判断_______。
3、在一棵二叉树中,度为零的结点的个数为n0,度为2的结点的个数为n2,则有n0=_______。
4、设front为队首指针,rear为队尾指针,则循环队列sq是空队列的条件是_______。
5、同一数组中各元素的长度_______。
6、深度为k的二叉树共有2k-1个结点,该二叉树为_______二叉树。
7、若图G中每条边都_______方向,则称G为无向图。
8、二叉树的按层次遍历类似于图的_______遍历。
9、选择排序算法的效率为_______。
10、冒泡排序算法的效率为_______。
答案:
1、有穷性、确定性、可行性
2、栈空否
3、n2+1
4、sq->rear==sq->front
5、相等
6、满
7、没有
8、广度优先
9、O(nlogn)
10、O(n2)
三、判断题
1、数组的缺点是插入、删除运算效率低。
(√)
2、链表的优点是插入、删除运算效率高。
(√)
3、对图进行深度优先遍历时,应借助于一个队列。
(×)
4、二叉树的深度优先遍历与先序序列一致。
(√)
5、归并排序算法是原地算法。
( ×)
6、堆数据结构可以看作是一个非完全二叉树。
( ×)
7、对图进行广度优先遍历时,应借助于一个队列。
(√)
8、二叉树的深度优先遍历与后序序列一致。
(×)
9、对图进行广度优先遍历时,应借助于一个栈。
(×)
10、冒泡排序算法是原地算法。
( √)
四、简答题
1、初始为空的队列中,元素f,e,d,c,b,a依次进队以后,连续进行了三次出队操作,此时的队首元素是什么?
队尾元素是什么?队列操作应遵循的原则是什么?
答:
(1)队首元素是c
(2)队尾元素是a
(3)队列操作应遵循的原则是先进先出
2、当为解决某一问题而选择数据结构时,应从哪些方法考虑?
答:
通常从两方法考虑;第一是算法所需的存储空间量,第二是算法所需的时间。
对算法所需的时又涉及以下几点:
1)程序运行时所需输入的数据总量
2)计算机执行每条指令所需的时间
3)程序中指令重复执行的次数
3、写出用直接插入法排序将数值序列{33,23,8,41,68,64,50}排序过程的每一趟结果。
答:(1)23 33 8 41 68 64 50
(2)8 23 33 41 68 64 50
(3)8 23 33 41 68 64 50
(4)8 23 33 41 68 64 50
(5)8 23 33 41 64 68 50
(6)8 23 33 41 50 64 68
4、简述顺序表特点。
答:优点:
可随机存取表中任意数据元素,算法简单,空间利用率高;
直接可获取线性表的长度。
缺点:
1)需要预先确定数据元素的最大个数;
2)数据元素的插入、删除相对麻烦,插入和删除时需要移动较多的数据元素。
5、简述逻辑结构和存储结构的关系。
答:在数据结构中,逻辑结构与计算机无关,存储结构是数据元素之间的逻辑关系在计算机中的表示。
存储结构不仅将逻辑结构中所有数据元素存储到计算机内存中,而且还要在内存中存储各种数据元素间的逻辑关系。
通常情况下,一种逻辑结构可以有多种存储结构,例如,线性结构可以采用顺序存储或链式存储结构表示。
6、简述线性表、栈和队列的异同。
答:线性表、栈和队列中元素这之间的逻辑关系都是线性关系。
栈和队列是操作位置受限的线性表,即对播入和删除操作的位置加以限制,都只能在端点进行。
栈是仅允许在表的一端进行插入和删除操作的线性表,因而是后进先出表。
队列是只允许在表的一端进行插入,另一端进行删除操作的线性表,因而是先进先出表。
7、堆排序是否是一种稳定的排序方法?为什么?
答:堆排序是不种不稳定的排序方法。
因为在堆的调整过程中,关键字进行比较和交换所走的是该节点到叶子节点的一条路径,因此对相同的关键字而言,就可能出现排在后面的关键字补交换到前面来的情况。
8、若频繁地对一个线性表进行插入和删除操作,该线性表宜采用何种存储结构,为什么?
答:宜采用链式存储结构。
因为采用链式结构存储线性表,在插入和删除操作时只修改相关节点的指针域,不需要移动节点;而采用顺序结构存储线性表,插入和删除操作需要平均移动表中的一半元素。
修改指针域操作比移动元素操作花费的时间少得多。
9、对单链表设置头节点的作用是什么?
答:对于带头节点的单链表,在单链表的任何节点之前插入节点或删除节点,所要做的都是修改前一个节点的指针域,因为任何节点都有前驱节点(若单链表没有头节点,则首节点没有前驱节点,在其前插入节点和删除节点时操作复杂些)。
对于带头节点的链表,在表空时也存在一个头节点,因此空表与非空表的处理是一样的。
五、算法题
1、简述冒泡排序算法的思想,并通过类C语言给出代码实现。
算法思想
1)不停地比较相邻的记录,如果不满足排序要求,就交换相邻记录,直到所有的记录都已经排好序。
2)检查每次冒泡过程中是否发生过交换,如果没有,则表明整个数组已经排好序了,排序结束。
void BubbleSort(Record Array[], int n) {
bool NoSwap;// 是否发生了交换的标志
int i, j;
for (i = 0; i < n-1; i++) {
NoSwap = true;// 标志初始为真
for (j = n-1; j > i; j--)
if (Array[j] < Array[j-1]) { // 判断是否逆置
swap(Array, j, j-1);// 交换逆置对
NoSwap = false;// 发生了交换,标志变为假
}
if (NoSwap) // 没发生交换,则排好序
return;
}
}
2、简述直接选择排序算法的思想,并用类C语言给出算法实现。
算法思想:选出未排序记录中的最小记录,然后直接与未排序序列中第1个记录交换。
void SelectSort(Record Array[], int n) {
// 依次选出第i小的记录,即剩余记录中最小的那个
for (int i=0; i<n-1; i++) {
// 首先假设记录i就是最小的
int Smallest = i;
// 开始向后扫描所有剩余记录
for (int j=i+1;j<n; j++)
// 如果发现更小的记录,记录它的位置
if (Array[j] < Array[Smallest])
Smallest = j;
//将第i小的记录放在数组中第i个位置
Record temp = Array[Smallest];
Array[Smallest]= Array[i];
Array[i]= temp;
}
}
3、简述直接插入排序算法的思想,并通过类C语言给出代码实现。
算法思想:利用有序表的插入操作进行排序
void InsertSort (Record Array[], int n) {
//Array[]为待排序数组,n为数组长度
Record TempRecord;// 临时变量
for (int i=1; i<n; i++) {// 依次插入第i个记录
TempRecord = Array[i];
//从i开始往前寻找记录i的正确位置
int j = i-1;
//将那些大于等于记录i的记录后移
while ((j>=0) && (TempRecord < Array[j])) {
Array[j+1] = Array[j];j = j - 1;
}
//此时j后面就是记录i的正确位置,回填
Array[j+1] = TempRecord;
}
}。