数据结构试题.docx
《数据结构试题.docx》由会员分享,可在线阅读,更多相关《数据结构试题.docx(26页珍藏版)》请在冰豆网上搜索。
数据结构试题
数据结构试题3
一、选择题(每小题2分,共8分)
1. 若需要利用形参直接访问实参,则应把形参变量说明为( )参数。
A. 指针 B. 引用
C. 值
2. 在一个单链表HL中,若要在指针q所至结点的后面插入一个由指针p所指向的结点,则执行()。
A. q->next=p->next; p->next=q;
B. p->next=q->next; q=p;
C. q->next=p->next; p->next=q;
D. p->next=q->next; q->next=p;
3. 在一个顺序队列中,队首指针指向对首元素的()位置。
A. 后一个 B. 前一个
C. 当前
4.向二叉搜索树中插入一个元素时,其时间复杂度大致为( )。
A. O(long2n) B. O(n)
C. O
(1) D. O(nlong2n)
二.、填空题(每空1分,共同社2分)
1. 数据的存储结构被分为_______________,________________,_______________和______________四种。
2. 对于一个顺序存储的线性表,在表头插入元素的时间复杂度为______________, 在表尾插入元素的时间复杂
度为_______________。
3. 在稀疏矩阵所对应的三远组线性表中,每个三元组元素按______________为主序,_______________为辅序
的次序排列。
4. 在广义表的存储结构中,单元表结点与表元素结点有一个域对应不同,各自分别为_______________域和_______________域。
5. 中级表达式3+x*(2.4/5-6)所对应的后缀表达式为_________________。
6. 在一棵高度为h的3叉树中,最多含有_______________结点。
7. 假定一棵二叉树的结点数为18,则它的最小深度为_______,最大深度为______。
8. 在一课二叉树搜索中,每个分支结点的左子树上所有的结点的值一定______该结点的值,右子树上所有的结
点的值一定_____该结点的值。
9. 当向一个小根堆插入一个具有最小值的元素时,该元素需要逐层______调整,知道被调整到______位置为止。
10. 表示图的三种存储结构为________________,_________________和_________________。
11. 对用邻接矩阵表示的具有n个定点和e条边的图进行任一种遍历时,其时间复杂度为__________,对用邻接
表表示的图进行任一种遍历时,其时间复杂度为______________。
12. 从有序表(12,18,30,43,56,78,82,95)中依次二分查找43和56元素时,其查找长度分别为______和______。
13. 假定对长度n=144的线性表进行索引查找,并假定每个子表的长度均为 ,则进行索引查找的平均查找长度
为_______,时间复杂度为________________。
14. 一棵B_树中的所有叶子结点均处在_______________上。
15. 每次从无序表中顺序取出一个元素,把它插入到有序表中的适当位置,此种排序方法叫做______排序;每
次从无序表中挑选出一个最小或最大元素,把它交换到有序表的一端,此种排序方法叫做______排序。
16. 快速排序在平均情况下的时间复杂度为________________,在最环情况下的时间复杂度为
______________。
三.、运算题(每小题6分,共24分)
1. 假定一棵普通树的广义表表示a(b(e),c(f(h,i),g),d),分别写出先根、后根、按层遍历的结果。
先根:
后根:
按层:
2. 已知一个带全图的定点集V和边集G分别为:
V={0,1,2,3,4,5,6,7};
E={(0,1)8,(0,2)5,(0,3)2,(1,5)6,(2,3)25,(2,4)13(3,5)9};
则求出该图的最小生成树的权。
最小生成树的泉:
3. 对于线性表(18,25,63,50,41,32,90,66)进行三列存储时,若选用H(K)=K%11作为散列函数,则散
列地址为0的元素有______个,散列地址为3的元素有______个,散列地址为8的元素有______个。
4. 假定一组纪录的排序码为(46,79,56,38,40,80,25,34),在对其进行快速排序的过程中,进行第
一次划分后得到的排序码序列为。
四、阅读算法,回答问题(每小题8分,共16分)
1. Void AD(LNode*&HL)
{
Insert(HL,30);
Insert(HL,50);
Delete(HL,26);
Delete(HL,55);
}
假定调用该算法时以HL为表头指针的单链表中的内容为(15,26,48,55),则调用返回后该单链表中的内容变为:
__________________________________________。
2. Void AI(adjmatrixGA,int I,int n)
{
cout<
visited[I]=true;
for(int j=0;jif (Ga[I][j]!
=0&&[I][j]!
=MaxValue&&!
visited[j])
AI(GA,J,n);
}
该算法的功能为:
________________________________________________________________________。
五、算法填空,在画有横线的地方填写合适的内容
此为以BST为树根指针的二叉搜索树上插入值为litem的结点的递归算法。
Void Insert(BtreeNode*&BST,const ElemType&item)
{
if(BST==NULL)
{ BtreeNode*p=newBTreeNode;
p->data=item;
_________________________________________________________;
BST=p;
}
else if(itemdata)____________________________________;
else_________________________________________;
}
六. 编写算法(10分)
编写向类型为List的线性表L中第I个元素为值插入一个元素的算法,假定不需要对I的值进行有效性检查,同时不需要检查存储空间是否用完。
Void Insert(List&L,int I,ElemType x)
完
〖微笑天使收集整理QQ:
84024257〗
答案:
一、 单选题
1、B.2、D.3、B.4、A
二、 填空
1、 顺序结构、链接结构、索引结构、散列结构(次序无先后)
2、 O(n)、O
(1)
3、 行号、列号
4、 值(或data)、子表指针(或sublist)
5、 3x2.45/6-*+
6、 (3h-1)/2
7、 5 18
8、 小于 大于
9、 向上 堆顶
10、邻接矩阵 邻接表 边集数组(次序无先后)
11、O(n2) O(e)
12、1 3
13、13 O( )
14、同一层
15、插入 选择
16、O(nlog2n) O(n2)
三、 运算题
1、 先根:
a,b,e,c,f,h,I,g,d;
后根:
e,b,h,I,f,g,c,d,a;
按层:
a,b,c,d,e,f,g,h,I;
2、 最小生成树的权:
34
3、 1 1 2 每个数据占2分
4、 (40 ,34 ,25,38,46,80,56,79)
四、 阅读算法,回答问题。
1、(15,30,48,50)
2、从初始点Vi出发深度优先搜索遍历由邻接矩阵GA所表示的图。
五、 算法填空,在画有横线的地方填写合适的内容。
p->left=p->right=null
insert(bst->left,item)
insert(bst->right,item)
六、 编写算法
void insert(list&L,int I ,elemtype x)
{
for(int j=L.size-1; j>=I-1; j--)
L.list[j+1]=L.list[j];
L.list[I-1]=x;
L.lize++;
}
第二套
一、 单选题:
判断下列各小题叙述的正误。
对,在题号前的括号内填入“√ ”;错,在题号前填入“ ×”。
(每小题3分,共24分)
( )
(1)有n个结点的不同的二叉树有n!
棵。
( )
(2)直接选择排序是一种不稳定的排序方法。
( )(3)在2048个互不相同的关键码中选择最小的5个关键码,用堆排序比用锦标赛排序更快。
( )(4)当3阶B 树中有255个关键码时,其最大高度(包括失败结点层)不超过8。
( )(5)一棵3阶B 树是平衡的3路搜索树,反之,一棵平衡的3路搜索树是3阶B 树。
( )(6)在用散列表存储关键码集合时,可以用双散列法寻找下一个空桶。
在设计再散列函数时,要求计算出的值与表的大小m互质。
( )(7)在只有度为0和度为k的结点的k叉树中,设度为0的结点有n0个,度为k的结点有nk个,则有n0=nk+1。
( )(8)折半搜索只适用与有序表,包括有序的顺序表和有序的链表。
二、 阅读理解题:
说明下面递归过程的功能(10分)
int unknown(BinTreNode * t){
//指针T是二叉树的根指针。
if(t==NULL)return-1;
elseif(unknown(t—leftChild)>=unknown(t—rightChild))
return 1+unknown(t—leftChild));
elsereturn 1+unkuown(t—rightChild);
}
三、 简答题(每小题12分,共36分)
1.设已有12个不等长的初始归并段,各个归并段的长度(包括记录数)分别为 RUN1(25),RUN2(13),RUN3(04),RUN4(55),RUN5(30),RUN6(47),RUN7(19),RUN8(80),RUN9(76),RUN10(92),RUN11(55),RUN12(89)
若采用的是4路平衡归并排序,试画出其最佳归并树,并计算每趟归并时的读记录数。
(括号内即为该归并段包含的记录数)
2.设散列表的长度m=13;散列函数为H(K)=K mod m,给定的关键码序列为19,14,23,01,68,20,84,27,55,11,试画出用线性探查法解决冲突时所构造的散列表。
并求出在等概率的情况下,这种方法的搜索成功时的平均搜索长度和搜索不成功的平均搜索长度。
0 1 2 3 4 5 6 7 8 9 10 11 12
搜索成功时的平均搜索长度为:
ASLsucc=
搜索不成功时的平均搜索长度为:
ASLunsucc=
3.画出在一个初始为空的AVL树中依次插入3,1,4,6,9,8,5,7时每一步插入后AVL树的形态。
若做了某种旋转,说明旋转的类型。
然后,给出在这棵插入后得到的AVL树中删去根结点后的结果。
四 、(10分)
以知一组元素为(46,25,78,62,12,37,70,29),试画出按元素排列次序插入生成的一棵二叉搜索树。
五 、综合算法题(10)
设有一个表头为first的单链表。
试设计一个算法,通过遍历一趟链表,将链表中所有结点按逆序链接。
六、 程序填空题
下面给出的算法是建立AOV网络并对其进行拓扑排序的算法,其中有多个语句缺失。
Void Graph :
:
TopologicalSort(){
Edge * p , q ; int I , j , k ;
For (I=0; INodeTable[I].adj=NULL;
1、 ;
}
cin>> j >> k ;
while ( j&& k){
p=new Edge ( k ) ;
p—link=NodeTable[ j ].adj ;
2、 ;
Count [ k ] ++ ;
Cin >> j >> k ;
}
int top=-1 ;
for ( I=0, Iif (count[ I ]=0 ) {
count[ I ]=top ;
3、
}
for ( I=0 ; I< n ; I++ )
if (top = -1 )
{ cout << “Network has a cycle” << endl ; return ; }
else {
j= top; 4、 ;
cout <q=NodeTable[ j ].adj ;
while ( q ) {
k= q—dest ;
if (----count [ k ] == 0
count [ k ] = top ;
top = k ;
}
5、 ;
}
}
}
请将缺失的语句补上:
1、
2、
3、
4、
5、
(2)请给出对于下面AOV网络,使用上述算法进行拓扑排序的结果,以及在count数据库中建立的链式栈的变化。
(top是栈顶指针)(5分)
B
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
A D E F
C
--------------------------------------------------------------------------------
top
A
B
C
D
E
F
初始
〖微笑天使收集整理QQ:
84024257〗
试题答案及评分标准
(供参考)
一、单选题
解答
(1)×
(2)√(3)×(4)√(5)×(6)√(7)×(8)×
二、 阅读理解题
解答:
计算二叉树的高度(深度)。
三、 简答题
1、 解答:
构造最佳归并树
因为(12-1)/(4-1)=2,所以需要补充4-2-1=1个空归并段,命名为RUN(0)。
依此构造4叉霍夫曼树:
R0(00) R3(04) R2(13) R7(19)
R1(25) R5(30) R0237(36) R6(47) R4(55) R11(55) R9(76) R8(80)
R12(89) R12(92) R0123567(138) R48911(266)
R0-12(585)
此即最佳归并树。
第一趟读记录数为36,第二趟读记录数为138+266=404,第三趟读记录书数为89+92+138+266=585。
2 、解答
设散列表的长度 m=13;散列函数为H(K)=K mod m,给定的关键码序列为19,14,23,01,68,20,84,27,55,11,则有
H(19)=6 ,成功; H(14)=1 ,成功; H(23)=10 ,成功;
H(01)=1 ,冲突,=2,成功; H(68)=3 ,成功; H(20)=7 ,成功;
H(84)=6 ,冲突,=7,冲突,=8,成功;
H(27)=16 ,冲突,=2,冲突,=3,冲突,=4,成功;
H(55)=3 ,冲突,=4,冲突,=5,成功; H(11)=11 ,成功;
0 1 2 3 4 5 6 7 8 9 10 11 12
14
01
68
27
5
19
20
84
23
11
(1)
(2)
(1) (4) (3)
(1)
(1) (3)
(1)
(1)
在等概率的情况下,搜索成功时的平均搜索长度:
ASLSUCC=18/10=1.8
搜索不成功时的平均搜索长度:
ASLSUCC=52/13=4
3、 画出在一个初始为空的AVL 树中依次插入3,1,4,6,9,8,5,7时每一步插入后AVL树的形态。
若做了某种旋转,说明旋转的类型。
然后,给出在这棵插入后得到的AVL树中删去根结点的结果。
解答:
3 3 3 3 3 3
--------------------------------------------------------------------------------
1 1 4 1 4 1 4 左单旋 1 6
6 6 4 9
9
3 6 6
1 6 左单旋 3 9 3 9
--------------------------------------------------------------------------------
4 9 1 4 8 1 4 8
5
6 6
3 9 3 8
1 4 8 右单旋 1 4 7 9
--------------------------------------------------------------------------------
5 7 5
这个AVL 树中删除根结点时有两种方案:
方案1 :
在根的左子树中沿右链走到底,用5递补根结点中原来的6,再删除5所在的结点。
5
3 8
1 4 7 9
方案2 :
在根的左子树中沿左链走到底,用7递补根结点中原来的6,再删除7所在的结点。
7
3 8
1 4 9
5
四、(10)
得到的二叉树如下:
46
25 78
12 37 62
29 70
五、 综合算法题
设有一个表头指针为first的单链表。
试设计一个算法,通过遍历一趟链表,将链表中所有结点按逆序链接。
解答1
template void List :
:
Tnerse() {
if (first== NULL )return ;
ListNode * p=first→link ; , *pr =NULL ;
While (p !
=NULL ) {
First→link =pr ;
Pr =first ;first =p ;p =p→link;
}
first ->link =pr ;
}
解答2
template void List :
:
Tnerse() {
ListNode * p , *head = new ListNode ( ) ;
While (first !
= NULL ) {
P=first ;first = first→link;
p→link =head→link ; head→link =p;
}
first = head→link ; delete head ;
}
六 、程序填空题
解答
请将缺失的语句补上(共5分,每空1分)
1count [ I ]= 0
2 NodeTable [j ].adj =p
3 top =I
top =count [top ]
q=q→link
(2) 对于下面AOV网络,使用上述算法进行拓扑排序的结果,以及在count数组中建立的链式栈的变化。
(top是栈顶指针)(5分)
排序结果是 A B C D E F ,链式栈count 的变化如下 :
→
→A
B
C
D
E
F
-1
→
→
→
→
→
1
-1
2
1
-1
2
2
1
-1
2
2
1
1
-1
2
1
1
1
1
-1
初始 输出A 输出B 输出C 输出D 输出E 输出F
B进栈 C进栈 D进栈 E进栈 F进栈 栈空
第一部分
第一部分 选择题(30分)
一、 单项选择题(本大题共15小题,每小题2分,共30分)在每小题列出的四个选项中只有一个选项是符合题目要求的,请将正确选项前的字母填在题后的括号内。
1.算法指的是( )
A.计算机程序 B.解决问题的计算方法
C.排序算法 D.解决问题的有限运算序列
2.线性表采用链式存储时,结点的存储地址( )
A.必须是不连续的
B.连续与否均可
C.必须是连续的
D.和头结点的存储地址相连续
3.将长度为n的单链表链接在长度为m的单链表之后的算法的时间复杂度为( )
A.O
(1) B.O(n) C.O(m) D.O(m+n)
4.由两个栈共享一个向量空间的好处是:
( )
A.减少存取时间,降低下溢发生的机率
B.节省存储空间,降低上溢发生的机率
C.减少存取时间,降低上溢发生的机率
D.节省存储空间,降低下溢发生的机率
5.设数组data[m]作为循环队列SQ的存储空间,front为队头指针,rear为队尾指针,则执行出队操作后其头指针front值为( )
A.front=front+1 B.front=(front+1)%(m-1)
C.front=(front-1)%m D.front=(front+1)%m
6.如下陈述中正确的是( )
A.串是一种特殊的线性表 B.串的长度必须大于零
C.串中元素只能是字母 D.空串就是空白串
7.若目标串的长度为n,模式串的长度为[n/3],则执行模式匹配算法时,在最坏情况下的时间复杂度是( )
A.O( ) B.O(n) C.O(n2) D.O(n3)
8.一个非空广义表的表头( )
A.不可能是子表 B.只能是子表
C.只能是原子 D.可以是子表或原子
9.假设以带行表的三元组表表示稀疏矩阵,则和下列行表
0 2 3 3 5
对应的稀疏矩阵是( )
10.在一棵度为3的树中,度为3的结点个数为2,度为2 的结点个数为1,则度为0的结点个数为( )
A.4 B.5 C.6 D.7
11.在含n个顶点和e条边的无向图的邻接矩阵中,零元素的个数为( )
A.e