大工20春9月网考【数据结构】复习资料

大工20春9月网考【数据结构】复习资料
大工20春9月网考【数据结构】复习资料

大连理工大学网络教育学院

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

// 首先假设记录i就是最小的

int Smallest = i;

// 开始向后扫描所有剩余记录

for (int j=i+1;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

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;

}

}

相关主题
相关文档
最新文档