南大软院数据结构期末试题整理版1.docx
《南大软院数据结构期末试题整理版1.docx》由会员分享,可在线阅读,更多相关《南大软院数据结构期末试题整理版1.docx(22页珍藏版)》请在冰豆网上搜索。
南大软院数据结构期末试题整理版1
软件学院2021级<<数据结构>>期终试题.12.31
姓名学号
123得分
1.填充题(36分,每空3分)
1)设有n个不同关键码的对象在排序前已按关键码由小到大排好序,用下列方法对其按关键码进行排序,需要进行比较的次数:
直接插入排序:
,快速排序。
在直接插入排序,折半插入排序,直接选择排序,.起泡排序,快速排序,归并排序中关键码比较的次数与记录的初始排序无关的排序方法有。
2)设栈S和队列Q的初始状态为空,元素a1,a2,a3,a4,a5,a6,a7,和a8依次通过栈S,一个元素出栈后立即进入队列Q,若8个元素出队列的顺序是a3,a6,a8,a7,a5,a4,a2,a1,则栈S的容量至少应该是多少(即至少应该容纳多少个元素)。
3)对有10个元素的有序表,采用二分查找,需要比较4次方可找到的元素个数为_________________。
4)在有51个结点的完全二叉树中,度为1的结点个数是____________。
5)一个具有n个顶点的无向图至多有_______________条边。
该图又称为
。
6)一棵AVL树T中结点的关键码均为正整数(从1开始取值),它有下列特点:
(1)删除关键码为k1的某个叶结点,然后再插入关键码k1,得到的AVL树与原
AVL树T不同;
(2)删除T中关键码为k2的非叶结点,然后再插入关键码k2,得到的AVL树与原AVL树T相同;
(3)往T中插入某个关键码k3,然后再删除k3,得到的AVL树与原AVL树T不同。
画出具有上述特点且结点个数最少的一棵AVL树。
并指出关键码k1、k2、k3的值分别是多少?
7)设某一二叉树的中序遍历序列为A,B,C,D,E,F,G,后序遍历序列为B,D,C,A,F,G,E,则该二叉树的先序遍历序列为______________。
8)判别以下序列是否是堆?
如果不是,将它调整为最大堆。
{12,70,33,65,24,56,48,92,86,33}
2.解答题(40分,每题10分)
1)散列表的地址区间为0-16,散列函数为H(K)=K%17,采用线性探查法处理冲突,请将关键码序列26、25、72、38、8、18、59依次存储到散列表中。
(1)元素59存放在散列表中的地址是多少?
(2)搜索元素59需要比较的次数是多少?
答:
2)下面是一棵3阶B-树。
试分别画出依次删除50、40之后的B-树。
50
306080
2040557095
答:
3)按Dijkstra方法计算下列图中从顶点1到其它顶点的最短路径。
按路径递增顺序写出先后计算出的最短路径(包括起止点和途径各点)及该路径长度。
答
4)给出一组实数w={15,1,4,6,12,25,7}画出以这一组实数为权的哈夫曼树。
并计算其带权的外路径长度。
答:
3算法题(24分,第1题10分,第2题14分)
1)已知first为不带表头结点的单链表的表头指针(如下图所示),链表中存储的都是整型数据,试写出求所有结点的data域平均值的递归函数。
datalink
first
…..
a1a2a3……annull
答:
2)给定一棵二叉搜索树t,其根指针为root,各结点结构为
leftdataright,left,right分别指向该结点的左、右子树,假设data域为int型。
试用Java(或C++)语言写一个程序:
给出该二叉搜索树的结点与二叉树搜索树的类说明(仅写出必要的成员变量和成员函数),并写出按由大到小的顺序输出二叉搜索树中所有不小于k的数据(k为一给定int型值)
答:
软件学院2005级<<数据结构>>期终试题A卷答案2006.12.31
1.填充题(36分,每空3分)
1)直接插入排序:
n-1。
快速排序:
n*(n-1)/2。
折半插入排序,直接选择排序
2)6
3)3
4)0
5)(n*(n-1))/2无向完全图
6)
3k1=1
15k2=5
k3=7
46
7)EACBDGFE
AG
CF
BD
8)最大堆为92,86,56,70,33,33,48,65,12,24
2.解答题(40分,每题10分)
1)H(26)=26%17=9H(8)=8%17=8
H(25)=25%17=8H(18)=18%17=1
H(72)=72%17=4H(59)=59%17=8
H(38)=38%17=4
012345678910111213141516
1872382526859
1121134
1)59的散列地址为11
2)搜索了4次
2)删50删40
(5分)55(5分)5580
30802030607095
2040607095
3)1225
12441
124348
1243553
4)70
2743
12151825
711
56
14
(12+15+25)*2+7*3+6*4+(1+4)*5=174
3算法题(24分,第1题10分,第2题14分)
1)classListNode
{intdata;
ListNodelink;
}
floatAverage(ListNodef,intn)1分
{if(f.link==NULL)returnf.data;3分
elsereturn(Average(f.link,n-1)*(n-1)+f.data)/n;6分
}
2)classBinaryNode
{;//构造函数
intdata;
BinaryNodeleft;
BinaryNoderight;
}2分
publicclassBinarySearchTree
{publicBinarySearchTree(){root=null;}
.
publicvoidBSTFind(BinarySearchTreet,intk);
privateBinaryNoderoot;
}2分
publicvoidBSTFind(BinarySearchTreet,intk)
{if(t)3分
{BSTFind(t.right,k);2分
if(t.data>=k)System.out.println(t.data);3分
BSTFind(t.left,k);2分
}
}
软件学院2006级<<数据结构>>期终试题2007.12.30
姓名学号
12345678得分
1.填充题(20分,每题5分)
1)树的机内表示(实现)有、、。
2)最小代价生成树有两种实现算法:
Prim算法与Kruscal算法。
两者分别适用于何种情况,。
3)采用堆排序方法将初始序列{8,23,12,5,28}按从小到大顺序排序,则建立初始堆和排序过程中序列依次变化为、、、、
。
4)在具有6个结点的无向简单图中,边数最少为条时,才能确保该图一定是连通图。
2.算法分析题(10分)
利用大“O”记号将下列函数在最坏情况下运行时间表示为n的函数(要求给出推导过程)
voidmystery(intn)
{for(inti=1;i<=n-1;i++)
for(intj=i+1;j<=n;j++)
for(intk=1;k<=j;k++)
}
答:
3.(15分,每题5分)
1)设有一字符串P=”3*y-a/y↑2”,试写出利用栈将P改为”3y*ay2↑/-”的操作步骤。
(请用X代表扫描该字符串过程中顺序取一字符进栈的操作,用S代表从栈中取出一字符加入到新字符串尾的出栈操作。
例如,要使”ABC”变为”BCA”,则操作步骤为XXSXSS)。
答:
2)设数组Q[m]表示一个环形队列(下标为0到m–1),rear为队列中最后一个元素的实际位置,length为队列中元素的个数,求队列中第一个元素的实际位置(要求写出计算公式)
答:
3)试说明一棵二叉树无论进行先序、中序或后序遍历,其叶结点的相对次序不发生改变。
答:
4.(10分)
对下列无向图,按照Dijkstra算法,写出从顶点1到其它各个顶点的最短路径和最短路径长度。
(顺序不能颠倒)
10
5
8
6
9
11
7
135
7
246
答:
5.(10分)
设散列表长度为11,散列函数H(K)=(K的第一个字母在英文字母表中的序
号,设A的序号为1)%11,若输入顺序为(B,D,M,CI,I,K,TM,X),处理冲突方法为线性探测法,要求:
1)构造此散列表。
2).对表中所有键值分别查找1次,求出总的比较次数。
答:
6.(10分,每题5分)
下列各图都是平衡二叉树,请按指定的关键码插入,分别画出插入后的平衡二叉树。
1)15
825插入56
792036
51850
2)MAR
AUGMAY插入FEB
(按字母顺序)
APRJANNOV
DECJULY
答:
7.(10分)
假设一棵带索引的二叉搜索树,root指向其根结点,树中每个结点具有如下形式:
Lsizeleftdataright
其中,Lsize域的值为该结点左子树中的结点个数加1;left,right分别指向该结点的左、右子树,且假设data域为int型。
试用java语言写一个递归的findk函数,即搜索这棵带索引的二叉搜索树中第K个小的关键码结点。
答:
8.(15分)
答:
软件学院2006级<<数据结构>>期终试题答案2007.12.30
1.填充题(20分,每题5分)
1)双亲表示,广义表表示、左子女—右兄弟表示
2)Prim算法适合于图中顶点少,边多的情况。
Kruscal算法适合于图中顶点多,边少的情况。
3)28,23,12,5,8、23,8,12,5,28、12,8,5,23,28、8,5,12,23,28、
5,8,12,23,28
4)11条
2.算法分析题(10分)
i:
1234………..n-1
j:
2~n3~n4~n5~n………n~n
k:
1~j
2+3+4+5+……+n
+3+4+5+……+n
+4+5+……+n
+5+……+n
+…..
+n
=2*1+3*2+4*3+5*4+……+n*(n-1)
=12+1+22+2+32+3+42+4+….+(n-1)2+(n-1)
=12+22+32+42+…..+(n-1)2+1+2+3+4+…+(n-1)
=(n-1)n(2n-1)/6+(n-1)n/2=n(n-1)(n+1)/3
=O(n3)
3.(15分,每题5分)
1)xsxxsxxsxxsxxssss
2)(rear–length+m+1)%m
3)先序:
根左子树右子树
中序:
左子树根右子树
后序:
左子树右子树根
4.(10分)
137
1211
13412
13514
13615
5.(10分)
012345678910
1)KBMDCIXITM
2)16次.
6.(10分,每题5分)
1)152)MAR
825DECMAY
792050AUGJANNOV
5183656APRFEBJULY
7.(10分)
publicBinaryNodefindk(intk,BinaryNodet)
{if(k==t.Lsize)returnt;
if(kif(t.right==NULL)returnNULL;
elsereturnfindk(k–t.Lsize,t.right);
}
8.(15分)
{intj=start,i=j/2;
while(j>1)
{if(a[i]<=temp)break;
else{a[j]=a[i];j=i;i=i/2;}
}
a[j]=temp;
}
借助于书中MinHeap的类定义,主函数中调用格式为percUp(n).
考试科目名称数据结构(A卷)
考试方式:
开卷 闭卷 考试日期 年 月 日 教师陈珮珮
系(专业) 计算机 年级 二年级(07级) 班级
学号 姓名 成绩
题号
一
二
三
四
五
六
七
八
九
十
分数
得分
1.算法分析题(10分)
利用大“O”记号将下列函数在最坏情况下运行时间表示为n的函数(要求给出推导过程)
voidmystery(intn)
{for(inti=1;i<=n-1;i++)
for(intj=i+1;j<=n;j++)
for(intk=1;k<=j;k++)
}
答:
得分
2.(20分,每题5分)
1)深度为k(设根结点为1层)的二叉树上,只有度为0和度为2的结点,
则这类二叉树上所含结点总数最少为个。
至多为个。
2)设有序顺序表中的元素依次为017,094,154,170,275,503,509,512,553,612,677,765,897,908.试画出对其进行折半搜索时的判定树,并计算搜索成功的平均搜索长度。
答:
3)设有一字符串P=”3*y-a/y↑2”,试写出利用栈将P改为”3y*ay2↑/-”的操作步骤。
(请用X代表扫描该字符串过程中顺序取一字符进栈的操作,用S代表从栈中取出一字符加入到新字符串尾的出栈操作。
例如,要使”ABC”变为”BCA”,则操作步骤为XXSXSS)。
答:
4)设W为一个二维数组,其每个数据元素占用6个字节,行下标i从0到8,列下标j从0到3,则二维数组W的数据元素共占用______个字节。
W中第6行的元素和第4列的元素共占用______个字节。
若按行主顺序存放二维数组W,其起始地址为100,则二维数组W的最后一个数据元素的起始地址为______。
得分
3.(10分)
对下列无向图,按照Dijkstra算法,写出从顶点1到其它各个顶点的最短路径和最短路径长度。
(顺序不能颠倒)
10
5
8
6
9
11
7
135
7
246
答:
得分
4.(10分)
设散列表HT[13],散列函数为H(key)=key%13,用闭散列法解决冲突,对关键码序列{12,23,45,57,20,03,78,31,15,36}构造散列表,用线性探查法寻找下一个空位,画出散列表,并计算等概率下搜索成功的平均搜索长度ASLsucc。
答:
得分
5.(10分)
对关键码序列{23,17,12,61,26,8,70,75,53},用堆排序方法进行排序,画出排序过程中所建的初始堆,以及输出前三个关键码过程的示意图。
(要求建立的堆为任一父母结点的关键码都小于其子女结点的关键码)
答:
得分
6.(10分)
下列各图都是AVL树(平衡二叉树),请按指定的关键码插入,分别画出插入后的AVL树(平衡二叉树)。
2)15
925插入56
792036
51850
2)MAR
AUGMAY插入FEB
,(按字母顺序)
APRJANNOV
DECJULY
得分
7.(10分)
请画出往下图的5阶B-树中插入一个关键码390后得到的B-树,以及再删除关键码100后得到的B-树。
100200300400
2040150180240260310320350370420430
答:
得分
8.(10分)
以下算法是用无表头结点的循环链表解Josephus(约瑟夫)问题,请在下划线部分填上正确的语句。
nolink
其中:
n表示有n个人参加该游戏;
m表示每次报的数;
rear一开始指向循环链表的尾结点。
ListNodeJosephus(intn,intm)
{intw=m;
ListNodehead,p;
for(inti=1;i<=n-1;i++)
{for(intj=1;j<=w-1;j++)
1;
if(i==1)
{head=rear.link;p=head;}
else
{p.link=rear.link;p=rear.link;}
2;
}
3;
rear.link=NULL;
returnhead;
}
得分
9.(10分)
给定一棵二叉树t,其根指针为root,结点结构为:
leftdataright
left,right分别指向该结点的左、右子树,假设data域为int型。
试用Java或C++语言写一个程序:
给出该二叉树的类定义(仅写出必要的成员变量和成员函数),并写出判别该二叉树是否是二叉搜索树的算法。
答:
考试科目名称 数据结构(A卷答案)
考试方式:
开卷 闭卷 考试日期 年 月 日 教师 陈珮珮
系(专业) 软件学院 年级 二年级(07级) 班级
学号 姓名 成绩
题号
一
二
三
四
五
六
七
八
九
十
分数
得分
1.算法分析题(10分)
i:
1234………..n-1
j:
2~n3~n4~n5~n………n~n
k:
1~j
2+3+4+5+……+n
+3+4+5+……+n
+4+5+……+n
+5+……+n
+…..
+n
=2*1+3*2+4*3+5*4+……+n*(n-1)
=12+1+22+2+32+3+42+4+….+(n-1)2+(n-1)
=12+22+32+42+…..+(n-1)2+1+2+3+4+…+(n-1)
=(n-1)n(2n-1)/6+(n-1)n/2=n(n-1)(n+1)/3
=O(n3)
得分
2.(20分,每题5分)
1)2*k-12k-1
2)509
154677
017275553897
094170503512612765908
AVLsucc=(1+2*2+3*4+4*7)/14=45/14
3).xsxxsxxsxxsxxssss
4).21672310=100+(8*4+3)*6
得分
3.(10分)
137
1211
13412
13514
13615
得分
4.(10分)
H(12)=12,H(23)=10,H(45)=6,H(57)=5,H(20)=7,H(03)=03,
H(78)=0,H(31)=5,H(15)=2,H(36)=10
0123456789101112
78150357452031233612
1111114121
ASLsucc=14/10=1.4
得分
5.(10分)
8121723
1712172326232661
53262370532661705375617053757017
7561758128128
得分
6.(10分)
1)152)MAR
825DECMAY
792050AUGJANNOV
5183656APRFEBJULY
得分
7.(10分)
插入390(5分)
300
100200350400
2040150180240260310320370390420430
删除100(5分)
200300350400
2040150180240260310320370390420430
或
1