清华大学《数据结构与算法》.docx
《清华大学《数据结构与算法》.docx》由会员分享,可在线阅读,更多相关《清华大学《数据结构与算法》.docx(48页珍藏版)》请在冰豆网上搜索。
清华大学《数据结构与算法》
数据结构与算法
一选择题
1.算法的计算量的大小称为计算的(B)。
A.效率B.复杂性C.现实性D.难度
2.下面说法正确的是(C)
(1)算法原地工作的含义是指不需要任何额外的辅助空间
(2)在相同的规模n下,复杂度O(n)的算法在时间上总是优于复杂度O(2n)的算法
(3)所谓时间复杂度是指最坏情况下,估算算法执行时间的一个上界
(4)同一个算法,实现语言的级别越高,执行效率就越低
A.
(1)B.
(1),
(2)C.
(1),(4)D.(3)
3.连续存储设计时,存储单元的地址(A)。
A.一定连续B.一定不连续C.不一定连续D.部分连续,部分不连续
4.下述哪一条是顺序存储结构的优点?
(A)
A.存储密度大B.插入运算方便C.删除运算方便D.可方便地用于各种逻辑结构的存储表示
5.若某线性表最常用的操作是存取任一指定序号的元素和在最后进行插入和删除运算,则利用(A)存储方式最节省时间。
A.顺序表B.双链表C.带头结点的双循环链表D.单循环链表
6.下面的叙述不正确的是(BC)
A.线性表在链式存储时,查找第i个元素的时间同i的值成正比
B.线性表在链式存储时,查找第i个元素的时间同i的值无关
C.线性表在顺序存储时,查找第i个元素的时间同i的值成正比
D.线性表在顺序存储时,查找第i个元素的时间同i的值无关
7.若长度为n的线性表采用顺序存储结构,在其第i个位置插入一个新元素的算法的时间复杂度为(C)(1<=i<=n+1)。
A.O(0)B.O
(1)C.O(n)D.O(n2)
8.双向链表中有两个指针域,llink和rlink,分别指回前驱及后继,设p指向链表中的一个结点,q指向一待插入结点,现要求在p前插入q,则正确的插入为(D)
A.p^.llink:
=q;q^.rlink:
=p;p^.llink^.rlink:
=q;q^.llink:
=p^.llink;
B.q^.llink:
=p^.llink;p^.llink^.rlink:
=q;q^.rlink:
=p;p^.llink:
=q^.rlink;
C.q^.rlink:
=p;p^.rlink:
=q;p^.llink^.rlink:
=q;q^.rlink:
=p;
D.p^.llink^.rlink:
=q;q^.rlink:
=p;q^.llink:
=p^.llink;p^.llink:
=q;
9.下列排序算法中,其中(D)是稳定的。
A)堆排序,冒泡排序B)快速排序,堆排序
C)直接选择排序,希尔排序D)归并排序,冒泡排序
10.对一组数据(84,47,25,15,21)排序,数据的排列次序在排序的过程中的变化为
(1)8447251521
(2)1547258421(3)1521258447(4)1521254784
则采用的排序是(A)。
A)选择B)冒泡C)快速D)插入
11.双向链表中有两个指针域,llink和rlink分别指向前趋及后继,设p指向链表中的一个结点,现要求删去p所指结点,则正确的删除是(D)(链中结点数大于2,p不是第一个结点)
A.p^.llink^.rlink:
=p^.llink;p^.llink^.rlink:
=p^.rlink;dispose(p);
B.dispose(p);p^.llink^.rlink:
=p^.llink;p^.llink^,rlink:
=p^.rlink;
C.p^.llink^.rlink:
=p^.llink;dispose(p);p^.llink^.rlink:
=p^.rlink;
D.以上A,B,C都不对。
12.一棵二叉树的前序遍历序列为ABCDEFG,它的中序遍历序列可能是(B)
A)CABDEFGB)BCDAEFGC)DACEFBGD)ADBCFEG
13.设一个栈的输入序列是1,2,3,4,5,则下列序列中,是栈的合法输出序列的是(D)。
A)51234B)45132C)43125D)32154
14.若一个栈的输入序列为1,2,3,…,n,输出序列的第一个元素是i,则第j个输出元素是(D)。
A.i-j-1B.i-jC.j-i+1D.不确定的
15.一个递归算法必须包括(B)。
A.递归部分B.终止条件和递归部分C.迭代部分D.终止条件和迭代部分
16.若需在O(nlog2n)的时间内完成对数组的排序,且要求排序是稳定的,则可选择的排序方法是(C)。
A)快速排序B)堆排序C)归并排序D)直接插入排序
17.下面关于串的的叙述中,哪一个是不正确的?
(B)
A.串是字符的有限序列B.空串是由空格构成的串
C.模式匹配是串的一种重要运算D.串既可以采用顺序存储,也可以采用链式存储
18.稳定的排序方法是(B)
A)直接插入排序和快速排序B)折半插入排序和起泡排序
C)简单选择排序和堆排序D)树形选择排序和shell排序
19.已知串S=‘aaab’,其Next数组值为(A)。
A.0123B.1123C.1231D.1211
20.串的长度是指(B)
A.串中所含不同字母的个数B.串中所含字符的个数
C.串中所含不同字符的个数D.串中所含非空格字符的个数
21.某堆栈的输入序列为a,b,c,d,下面的四个序列中,不可能是它的输出序列的是(D)。
A)a,c,b,dB)b,c,d,aC)c,d,b,aD)d,c,a,b
22.数组A[0..5,0..6]的每个元素占五个字节,将其按列优先次序存储在起始地址为1000的内存单元中,则元素A[5,5]的地址是(A)。
A.1175B.1180C.1205D.1210
23.A[N,N]是对称矩阵,将下面三角(包括对角线)以行序存储到一维数组T[N(N+1)/2]中,则对任一上三角元素a[i][j]对应T[k]的下标k是(B)。
A.i(i-1)/2+jB.j(j-1)/2+iC.i(j-i)/2+1D.j(i-1)/2+1
24.已知广义表LS=((a,b,c),(d,e,f)),运用head和tail函数取出LS中原子e的运算是(C)。
A.head(tail(LS))B.tail(head(LS))
C.head(tail(head(tail(LS)))D.head(tail(tail(head(LS))))
25.下面说法不正确的是(A)。
A.广义表的表头总是一个广义表B.广义表的表尾总是一个广义表
C.广义表难以用顺序存储结构D.广义表可以是一个多层次的结构
26.一组记录的关键码为(46,79,56,38,40,84),则利用快速排序的方法,以第一个记录为基准得到的一次划分结果为(C)。
A)(38,40,46,56,79,84)B)(40,38,46,79,56,84)
C)(40,38,46,56,79,84)D)(40,38,46,84,56,79)
27.已知一算术表达式的中缀形式为A+B*C-D/E,后缀形式为ABC*+DE/-,其前缀形式为(D)
A.-A+B*C/DEB.-A+B*CD/EC.-+*ABC/DED.-+A*BC/DE
-+A*BC/DE
28.若一棵二叉树具有10个度为2的结点,5个度为1的结点,则度为0的结点个数是(B)
A.9B.11C.15D.不确定
29.若二叉树采用二叉链表存储结构,要交换其所有分支结点左、右子树的位置,利用(C)遍历方法最合适。
A.前序B.中序C.后序D.按层次
30.将一个长度为n的向量的第i个元素删除时,需要前移(B)个元素。
A)iB)n-iC)n+1D)n-i+1
31.某二叉树T有n个结点,设按某种顺序对T中的每个结点进行编号,编号为1,2,…,n,且有如下性质:
T中任一结点V,其编号等于左子树上的最小编号减1,而V的右子树的结点中,其最小编号等于V左子树上结点的最大编号加1。
这时是按(B)编号的。
A.中序遍历序列B.前序遍历序列C.后序遍历序列D.层次顺序
32.线索二叉树是一种(B)结构。
A.逻辑B.逻辑和存储C.物理D.线性
33.非空循环链表head的尾结点*p满足下列(C)条件
A)head->next==p;B)head==p;C)p->next==head;D)p->next==0
34.一个栈的输入序列是a,b,c,d,e,则可能的出栈序列是(D)。
A)ecdabB)cebdaC)daecbD)abcde
35.设栈s的类型为sqstack,判定栈空的条件是(C)。
A)s==NULLB)s->top==0C)s.top==0D)s.top==NULL
36.深度为5的二叉树至多有个(B)结点。
A)12B)31C)14D)15
37.已知二叉树的后、中根序列分别是bedfca和badecf,则该二叉树的前根遍历序列是(C)。
A)defbcaB)fedbcaC)abcdefD)fedcba
38.一个有n个顶点的有向图最多有(B)弧。
A)n(n+1)B)n(n-1)C)n(n+1)/2D)n(n-1)/2
39.具有n个顶点的无向图至少要有(B)条边才有可能是一个连通图。
A)n(n+1)B)n-1C)n+1D)n(n-1)
40.图中有关路径的定义是(A)。
A.由顶点和相邻顶点序偶构成的边所形成的序列B.由不同顶点所形成的序列
C.由不同边所形成的序列D.上述定义都不是
41.一个向量的第一个元素的地址是100,每个元素的长度是2,则第五个元素的地址是(C)
A)102B)110C)108D)120
42.一个循环顺序队列,队头、尾指针的值分别为front,rear,则队列中元素个数为(A)。
(maxlen为循环顺序表的长度)
A)(rear-front+maxlen)%maxlen
B)(rear-front)%maxlen
C)rear-front+1
D)front-rear+1
43.一个有n个顶点的图最少有(D)条边。
A)n(n+1)B)n(n-1)C)n(n+1)/2D)0
44.具有5个顶点的无向图至少要有(A)条边才能确保是一个连通图。
A)4B)5C)6D)7
45.设栈s的类型为sqstack,最多可容纳maxlen个元素,则判定栈满的条件是(B)。
A)s==maxlen-1B)s.top==maxlen-1C)s->top==maxlen-1D)s.top==0
46.一个顺序队列q的类型为sqqueue,队头、尾指针分别为front,rear,最多可容纳maxlen个元素,则队空的条件是(C)。
A)front==rearB)rear==0C)q.front==q.rearD)rear==maxlen-1
47.下面是求连通网的最小生成树的prim算法:
集合VT,ET分别放顶点和边,初始为
(1),下面步骤重复n-1次:
a:
(2);b:
(3);最后:
(4)。
(1).A.VT,ET为空B.VT为所有顶点,ET为空
C.VT为网中任意一点,ET为空D.VT为空,ET为网中所有边
(2).A.选i属于VT,j不属于VT,且(i,j)上的权最小
B.选i属于VT,j不属于VT,且(i,j)上的权最大
C.选i不属于VT,j不属于VT,且(i,j)上的权最小
D.选i不属于VT,j不属于VT,且(i,j)上的权最大
(3).A.顶点i加入VT,(i,j)加入ETB.顶点j加入VT,(i,j)加入ET
C.顶点j加入VT,(i,j)从ET中删去D.顶点i,j加入VT,(i,j)加入ET
(4).A.ET中为最小生成树B.不在ET中的边构成最小生成树
C.ET中有n-1条边时为生成树,否则无解D.ET中无回路时,为生成树,否则无解
CABA
48.链栈与顺序栈相比,比较明显的优点是(D)
A)插入操作更加方便B)删除操作更加方便
C)不会出现下溢的情况D)不会出现上溢的情况
49.下面关于二分查找的叙述正确的是(D)
A.表必须有序,表可以顺序方式存储,也可以链表方式存储C.表必须有序,而且只能从小到大排列
B.表必须有序且表中数据必须是整型,实型或字符型D.表必须有序,且表只能以顺序方式存储
50.二叉查找树的查找效率与二叉树的(
(1))有关,在(
(2))时其查找效率最低
(1):
A.高度B.结点的多少C.树型D.结点的位置
(2):
A.结点太多B.完全二叉树C.呈单枝树D.结点太复杂。
CC
51.如果求一个连通图中以某个顶点为根的高度最小的生成树,应采用( B )
A)深度优先搜索算法B)广度优先搜索算法
C)求最小生成树的prim算法D)拓扑排序算法
52.既希望较快的查找又便于线性表动态变化的查找方法是(C)
A.顺序查找B.折半查找C.索引顺序查找D.哈希法查找
53.对表长为n的顺序表进行顺序查找,在查找概率相等的情况下,查找成功的平均查找长度为(C)
A)(n-1)/2B)n/2
C)(n+1)/2D)n
54.对于哈希函数H(key)=key%13,被称为同义词的关键字是(D)
A)35和41B)23和39
C)15和44D)25和51
55.某内排序方法的稳定性是指(D)。
A.该排序算法不允许有相同的关键字记录
B.该排序算法允许有相同的关键字记录
C.平均时间为0(nlogn)的排序方法
D.以上都不对
56.下列内部排序算法中:
A.快速排序B.直接插入排序C.二路归并排序D.简单选择排序E.起泡排序F.堆排序
(1)其比较次数与序列初态无关的算法是()
(2)不稳定的排序算法是()
(3)在初始序列已基本有序(除去n个元素中的某k个元素后即呈有序,k<(4)排序的平均时间复杂度为O(n•logn)的算法是()为O(n•n)的算法是()
1DC2ADF应是AF3B4ACFBDE
57.下列排序算法中(C)排序在一趟结束后不一定能选出一个元素放在其最终位置上。
A.选择B.冒泡C.归并D.堆
58.栈和队列都是(A)
A)限制存取位置的线性结构B)链式存储的非线性结构
C)顺序存储的线性结构D)限制存取位置的非线性结构
59.对关键码序列28,16,32,12,60,2,5,72快速排序,从小到大一次划分结果为(B)。
A.(2,5,12,16)26(60,32,72)B.(5,16,2,12)28(60,32,72)
C.(2,16,12,5)28(60,32,72)D.(5,16,2,12)28(32,60,72)
60.一棵含有n个节点的k叉树,可能达到的最小深度为多少?
(C)
A)n-kB)n-k+1C)|logkn|+1D)|logkn|其中|k|表示下取整
61.下列序列中(B)不是堆。
A)12365368486075B)12485368366075
C)12483660756853D)12366053486875
62.在下列内排序方法中,(C)的平均时间复杂性是O(nlogn)。
A)直接插入排序B)简单选择排序 C)快速排序D)希尔排序
63.设顺序栈s非空,则语句段(C)可实现栈s的出栈操作,其中s.top为栈顶指针,s.elem为栈空间,出栈的元素存放在x中。
A)s.top:
=s.top+1;B)x:
=s.elem[s.top];
x:
=s.elem[s.top];s.top:
=s.top+1;
C)s.top:
=s.top-1;D)x:
=s.elem[s.top];
x:
=s.elem[s.top];s.top:
=s.top-1;
64.有一组数据(15,9,7,8,20,-1,7,4),用堆排序的筛选方法建立的初始堆为(C)
A.-1,4,8,9,20,7,15,7B.-1,7,15,7,4,8,20,9
C.-1,4,7,8,20,15,7,9D.A,B,C均不对。
65.下述二叉树中,哪一种满足性质:
从任一结点出发到根的路径上所经过的结点序列按其关键字有序(D)。
A)二叉排序树B)哈夫曼树C)AVL树D)堆
66.下面给出的四种排序法中(D)排序法是不稳定性排序法。
A)插入B)冒泡C)二路归并D)快速排序
67.算法的时间复杂度取决于(A)
A.问题的规模B.待处理数据的初态C.A和BD.计算机cpu
68.有关静态链表的叙述:
(1)静态链表既有顺序存储的优点,又有动态链表的优点。
所以,它存取表中第i个元素的时间与i无关。
(2)静态链表中能容纳的元素个数的最大数在表定义时就确定了,以后不能增加。
(3)静态链表与动态链表在元素的插入、删除上类似,不需做元素的移动。
以上错误的是(B)
A.
(1),
(2)B.
(1)C.
(1),
(2),(3)D.
(2)
69.一个栈的输入序列为123…n,若输出序列的第一个元素是n,输出第i(1<=i<=n)个元素是(B)。
A.不确定B.n-i+1C.iD.n-i
70.下面关于串的的叙述中,哪一个是不正确的?
(B)
A.串是字符的有限序列B.空串是由空格构成的串
C.模式匹配是串的一种重要运算D.串既可以采用顺序存储,也可以采用链式存储
71.关于二叉树的叙述:
①只有一个结点的二叉树的度为0;②二叉树的度为2;③二叉树的左右子树可任意交换;④深度为K的完全二叉树的结点个数小于或等于深度相同的满二叉树。
正确的是(D)
A.①②③B.②③④C.②④D.①④
72.用DFS遍历一个无环有向图,并在DFS算法退栈返回时打印相应的顶点,则输出的顶点序列是(A)。
A.逆拓扑有序B.拓扑有序C.无序的
73.对n个关键字的序列进行快速排序,平均情况下的空间复杂度为(B)
A.O
(1)B.O(logn)
C.O(n)D.O(nlogn)
二填空题
1、在单链表L中,指针p所指结点有后继结点的条件是:
p->next!
=null
2、n(n大于1)个结点的各棵树中,其深度最小的那棵树的深度是_
(1)__。
它共有_
(2)__个叶子结点和_(3)__个非叶子结点,其中深度最大的那棵树的深度是_(4)__,它共有_(5)__个叶子结点和_(6)__个非叶子结点。
(1)2
(2)n-1(3)1(4)n(5)1(6)n-1
3、深度为9的完全二叉树最多有个结点
256应是511
4、二叉树由_
(1)__,__
(2)_,_(3)__三个基本单元组成。
.
(1)根结点
(2)左子树(3)右子树
5、先根遍历树林正好等同于按___遍历对应的二叉树.
先序
6、设只含根结点的二叉树的高度为0,则高度为k的二叉树的最大结点数为______,最小结点数为______。
(1)2K+1-1
(2)k+1
7、在有序表A[1..12]中,采用二分查找算法查等于A[12]的元素,所比较的元素下标依次为
6,9,11,12
8、设y指向二叉线索树的一叶子,x指向一待插入结点,现x作为y的左孩子插入,树中标志域为ltag和rtag,并规定标志为1是线索,则下面的一段算法将x插入并修改相应的线索,试补充完整:
(lchild,rchild分别代表左,右孩子)
x^.ltag:
=
(1)___;x^.lchild:
=
(2)___;y^.ltag:
=(3)___;
y^.lchild:
=(4)___;x^.rtag:
=(5)___;x^.rchild:
=(6)___;
IF(x^.lchild<>NIL)AND(x^lchild^.rtag=1)THENx^.lchild^.rchild:
=(7)___;
(1)1
(2)y^.lchild(3)0(4)x(5)1(6)y(7)x(本题按中序线索化)
9、有N个顶点的有向图,至少需要量_______条弧才能保证是连通的。
N-1
10、在顺序表(8,11,15,19,25,26,30,33,42,48,50)中,用二分(折半)法查找关键码值11,需做的关键码比较次数为
4
11、①二叉树用来表示表达式,因为需要保存各子树的值,修改二叉树的结点结构为(Lchild,Data,Val,Rchild)。
其中Lchild,Rchild的意义同前,Val用来存放以该结点为根的子树的值,值的类型依具体情况而定。
为了简便起见,算法假定所考虑的表达式只有+,-,*,/四种二目运算,且已表示成相应的二叉树。
算法所计算的表达式值放在根结点的Val域中。
PROCPostorder-eval(t:
ptrType)
BEGINIF(t!
=NULL)
BEGIN
(1)_______;
(2)_______;
CASEt^.data:
‘+’:
t^.Val:
=t^.Lchild^.Val+t^.Rchild^.Val;BREAK;
‘-’:
t^.Val:
=t^.Lchild^.Val-t^.Rchild^.Val;BREAK;
‘*’:
t^.Val:
=t^.Lchild^.Val*t^.Rchild^.Val;BREAK;
‘/’:
t^.Val:
=t^.Lchild^.Val/t^.Rchild^.Val;BREAK;
otherwise:
(3)___;BREAK;
ENDCASEEND
END;
②PROCDelete(x:
datatype,A:
tree)
BEGINtempA:
=(4)___;
WHILE(tempA^.Item!
=x)AND(tempA!
=NULL)DO
IF(x=tempA;tempA:
=(5)_