a[i][j]=i*j;
AO(m2)BO(n2)CO(m*n)DO(m+n)
14、下面程序段的时间复杂度为〔〕
intf(unsignedintn){
if(n==0||n==1)return1;
elsereturnn*f(n-1);
}
AO
(1)BO(n)CO(n2)DO(n!
)
15、线性表假设是采用链式存储构造时,要求存中可用存储单元的地址()。
A必须是连续的
B 局部地址必须是连续的
C一定是不连续的
D 连续或不连续都可以
16、数据构造的定义为(D,S),其中D是()的集合。
A算法B数据元素C数据操作D逻辑构造
17、算法分析的目的是()。
A 找出数据构造的合理性
B 研究算法中输入和输出的关系
C 分析算法的效率以求改良
D 分析算法的易懂性和文档性
18、在一个单链表中,假设p所指结点不是最后结点,在p之后插入s所指结点,那么执行()。
As->link=p;p->link=s;
Bs->link=p->link;p->link=s;
Cs->link=p->link;p=s;
Dp->link=s;s->link=p;
19、设单链表中结点构造为(data,link).指针q所指结点是指针p所指结点的直接前驱,假设在*q 与*p之间插入结点*s,那么应执行以下哪一个操作〔〕
As->link=p->link;p->link=s;Bq->link=s;s->link=p
Cp->link=s->link;s->link=p;Dp->link=s;s->link=q;
20、设单链表中结点构造为(data,link).假设想摘除结点*p的直接后继,那么应执行以下哪一个操作〔〕
Ap->link=p->link->link;
Bp=p->link;p->link=p->link->link;
Cp->link=p->link;Dp=p->link->link;
21、设单循环链表中结点的构造为〔data,link〕,且rear是指向非空的带表头结点的单循环链表的尾结点的指针。
假设想删除链表第一个结点,那么应执行以下哪一个操作〔D〕
As=rear;rear=rear->link;deletes;
Brear=rear->link;deleterear;
Crear=rear->link->link;deleterear;
Ds=rear->link->link;rear->link->link=s->link;deletes;s为第一个结点硫
22、设单循环链表中结点的构造为〔data,link〕,且first为指向链表表头的指针,current为链表当前指针,在循环链表中检测current是否到达链表表尾的语句是(D)。
Acurrent->link=nullBfirst->link=current
Cfirst=currentDcurrent->link=first
?
23、一个栈的入栈序列为a,b,c,那么出栈序列不可能的是(C)。
A c,b,aBb,a,cCc,a,bDa,c,b
24、栈的数组表示中,top为栈顶指针,栈空的条件是(A)。
A top=0Btop=maxSizeC top=maxSizeDtop=-1
25、栈和队列的共同特点是(C)。
A 都是先进后出B都是先进先出
C 只允许在端点处插入和删除D没有共同点
26、假定一个顺序存储的循环队列的队头和队尾指针分别为f和r,那么判断队空的条件为(D).
Af+1==rBr+1==fCf==0Df==r
27、当利用大小为n的数组顺序存储一个队列时,该队列的最大长度为〔B〕
An-2Bn-1CnDn+1
28、当利用大小为n的数组顺序存储一个栈时,假定用top==n表示栈空,那么向这个栈插入一个元素时,首先应执行〔〕语句修改top指针。
Atop++;Btop--;Ctop=0;Dtop;
29、设链式栈中结点的构造为〔data,link〕,且top是指向栈顶的指针。
假设想摘除链式栈的栈顶结点,并将被摘除结点的值保存到x中,那么应执行以下〔A〕操作。
Ax=top->data;top=top->link;Btop=top->link;x=top->data;
Cx=top;top=top->link;Dx=top->data;
30、设循环队列的构造是:
constintMaxsize=100;
typedefintDataType;
typedefstruct{
DataTypedata[Maxsize];
Intfront,rear;
}Queue;
假设有一个Queue类型的队列Q,试问判断队列满的条件应是以下哪一个语句〔D〕
AQ.front==Q.rear;BQ.front-Q.rear==Maxsize;
CQ.front+Q.rear==Maxsize;DQ.front==(Q.rear+1)%Maxsize;
31、设有一个递归算法如下:
intfact(intn)
{if(n<=0)return1;
elsereturnn*fact(n-1);
}
下面正确的表达是〔B〕
A计算fact(n)需要执行n次递归Bfact(7)=5040
C此递归算法最多只能计算到fact(8)D以上结论都不对
32、设有一个递归算法如下
intx(intn){
if(n<=3)return1;
elsereturnx(n-2)+x(n-4)+1;
}
试问计算x(x(8))时需要计算〔D〕次x函数。
A8次B9次C16次D18次
33、设有广义表D(a,b,D),其长度为〔B〕,深度为〔A〕
A∞B3C2D5
34、广义表A(a),那么表尾为〔C〕
AaB(())C空表D〔a〕
35、以下广义表是线性表的有〔C〕
AE〔a,(b,c)〕BE(a,E)CE(a,b)DE(a,L())
36、递归表、再入表、纯表、线性表之间的关系为〔C〕
A再入表>递归表>纯表>线性表B递归表>线性表>再入表>纯表
C递归表>再入表>纯表>线性表D递归表>再入表>线性表>纯表
37、某二叉树的前序和后序序列正好相反,那么该二叉树一定是〔 B 〕的二叉树。
A空或只有一个结点 B高度等于其结点数
C任一结点无左孩子 D任一结点无右孩子
38、对于任何一棵二叉树T,如果其终端结点数为n0,度为2的结点为n2.,那么(A)
An0=n2+1Bn2=n0+1Cn0=2n2+1Dn2=2n0+1
39、由权值分别为11,8,6,2,5的叶子结点生成一棵哈夫曼树,它的带权路径长度为〔B〕
A24B73C48D53
40、一个顺序存储的线性表,设每个结点需占m个存储单元,假设第一个结点的地址为da1,那么第I个结点的地址为〔 A 〕。
Ada1+(I-1)*m Bda1+I*m Cda1-I*m Dda1+(I+1)*m
41、34具有35个结点的完全二叉树的深度为(A)
A5B6C7D8
42、对线性表进展折半搜索时,要求线性表必须〔C〕
A以方式存储且结点按关键码有序排列B以数组方式存储
C以数组方式存储且结点按关键码有序排列D以方式存储
43、顺序搜索算法适合于存储构造为〔B〕的线性表。
A散列存储B顺序存储或存储
C压缩存储D索引存储
44、采用折半搜索算法搜索长度为n的有序表时,元素的平均搜索长度为〔C〕
AO〔n2〕BO〔nlog2n〕CO〔log2n〕DO〔n〕
45、对于一个具有n个顶点和e条边的无向图,进展拓扑排序时,总的时间为(A)
AnBn+1Cn-1Dn+e
46、判断一个有向图是否存在回路,除了可以利用拓扑排序方法外,还可以利用〔C〕。
A求关键路径的方法B求最短路径的Dijkstra方法
C深度优先遍历算法D广度优先遍历算法
47、在10阶B-树中根结点所包含的关键码个数最多为〔C〕,最少为(A)
A1B2C9D10
48、对包含n个元素的散列表进展搜索,平均搜索长度为〔C〕
AO〔log2n〕BO〔n〕C不直接依赖于nD上述都不对
二、填空题〔〕
1、 数据的逻辑构造被分为集合构造、线性构造、树形构造、图形构造四种
2、 数据的存储构造被分为顺序构造、构造、索引构造、散列构造四种3、一种抽象数据类型包括〔数据〕和〔操作〕两个局部。
4、设有两个串p和q,求p在q中首次出现的位置的运算称为〔模式匹配〕
5、 栈、队列逻辑上都是〔线性存储〕构造。
6、线性构造反映结点间的逻辑关系是〔一对一〕的,图中的数据元素之间的关系是〔多对多〕的,树形构造中数据元素间的关系是〔一对多〕的。
7、栈中存取数据的原那么〔 后进先出〕,队列中存取数据的原那么〔 先进先出 〕
8、串是由〔 零个或多个〕字符组成的序列。
〔 长度为零的串 〕称为空串,〔 由一个或多个空格组成的串〕称为空格串。
9、设目标串T=〞abccdcdccbaa〞,模式P=〞cdcc〞那么第〔6〕次匹配成功。
10、一维数组的逻辑构造是〔线性构造〕,存储构造是〔顺序存储表示〕。
对于二维数组,有〔行优先顺序〕和〔列优先顺序〕两种不同的存储方式,对于一个二维数组A[m][n],假设采用按行优先存放的方式,那么任一数组元素A[i][j]相对于A[0][0]的地址为〔n*i+j〕。
11、向一个顺序栈插入一个元素时,首先使〔栈顶指针〕后移一个位置,然后把待插入元素〔写〕到这个位置上。
从一个顺序栈删除元素时,需要前移一位〔栈顶指针〕。
12、在一个循环队列Q中,判断队空的条件为〔Q.front==Q.rear〕,判断队满的条件为〔(Q.rear+1)%MaxSize==q.front〕
13、对于一棵具有n个结点的树,该树中所有结点的度数之和为〔n-1〕。
14、一棵高度为5的满二叉树中的结点数为〔63〕个,一棵高度为3满四叉树中的结点数为〔85〕个。
15、假设对一棵二叉树从0开场进展结点编号,并按此编号把它顺序存储到一维数组中,即编号为0的结点存储到a[0]中,其余类推,那么a[i]元素的左子女结点为〔2*i+1〕,右子女结点为〔2*i+2〕,双亲结点〔i>=1 〕为〔「(i-1)/2┐〕.
16、在一个最大堆中,堆顶结点的值是所有结点中的〔最大值〕,在一个最小堆中,堆顶结点的值是所有结点中的〔最小值〕。
17、具有n个元素的一维数组采用顺序存储构造,每个元素占k个存储单元,第一个元素的地址为LOC(a1),那么,LOC(ai)=LOC(a1)+(i-1)*k。
18、在霍夫曼编码中,假设编码长度只允许小于等于4,那么除掉已对两个字符编码为0和10外,还可以最多对〔4〕个字符编码。
19、设高度为h的空二叉树的高度为-1,只有一个结点的二叉树的高度为0,假设设二叉树只有度为2上度为0的结点,那么该二叉树中所含结点至少有〔 2h+1 〕个。
20、由一棵二叉树的前序序列和〔中序序列〕可唯一确定这棵二叉树。
21、以折半搜索方法搜索一个线性表时,此线性表必须是〔顺序〕存储的〔有序〕表。
22、完全二叉树的第8层有8个结点,那么其叶子结点数是〔68〕。
假设完全二叉树的第7有10个叶子结点,那么整个二叉树的结点数最多是〔235〕
23、对于折半搜索所对应的判定树,它既是一棵〔二叉搜索树〕,又是一棵〔理想平衡树〕。
24、假定对长度n=50的有序表进展折半搜索,那么对应的判定树高度为〔 5 〕,判定树中前5层的结点数为〔31〕,最后一层的结点数为〔19〕。
25、在一个无向图中,所有顶点的度数之和等于所有边数的〔2〕倍。
在一个具有n个顶点的无向完全图中,包含有〔n(n-1)/2〕条边,在一个具有n个顶点的有向完全图中,包含有〔n(n-1)〕条边。
26、对于一个具有n个顶点和e条边的连通图,其生成树中的顶点数和边数分别为〔n〕和〔n-1〕。
27、设线性表中元素的类型是实型,其首地址为1024,那么线性表中第6个元素的存储位置是(1044)。
28、在插入和选择排序中,假设初始数据根本正序,那么选择〔插入排序〕,假设初始数据根本反序,那么最好选择〔选择排序〕。
29、算法是对特定问题的求解步驟的一种描述,它是〔指令〕的有限序列,每一条〔指令〕表示一个或多个操作。
30、对于一个具有n个顶点肯e条边的无向图,进展拓朴排序时,总的进间为〔n〕
31、构造哈希函数有三种方法,分别为(平方取中)法、(除留余数)法、(折迭移位)法。
32、处理冲突的三种方法,分别为(线性探测)、〔随机探测〕、〔链地址法〕。
33、对于含有n个顶点和e条边的无向连通图,利用普里姆算法产生的最小生成树,其时间复杂度为〔O〔n2〕〕、利用克鲁斯卡尔算法产生的最小生成树,其时间复杂度为〔O〔elog2e〕〕
34、快速排序在平均情况下的时间复杂度为〔O〔nlog2n〕〕,在最坏情况下的时间复杂度为〔O〔n2〕〕;快速排序在平均情况下的空间复杂度为〔O〔log2n〕〕,在最坏情况下的空间复杂度为〔O〔n〕〕。
35、假定一组记录的排序码为〔46,79,56,38,40,80〕,对其进展归并排序的过程中,第二趟排序后的结果是〔[38 46 56 79][40 80]〕
36、假定一组记录的排序码为〔46,79,56,38,40,80〕,对其进展快速排序的第一次划分的结果是〔[38 40]46[56 79 80]〕。
37、一个结点的子树的〔个数〕称为该结点的度。
度为〔零〕的结点称为叶结点或终端结点。
度不为〔零〕的结点称为分支结点或非终端结点。
树中各结点度的〔最大值〕称为树的度。
38、设Ki=Kj(1<=i<=n,1<=j<=n,j<>i)且在排序前的序列中Ri领先于Rj(i40、在堆排序的过程中,对任一分支结点进展调整运算的时间复杂度为〔O〔log2n〕〕,整个排序过程的时间复杂度为〔O〔nlog2n〕〕。
41、在索引表中,每个索引项至少包含有〔关键码值〕域和〔子表地址〕域这两项。
42、假定一个线性表为〔〞abcd〞,〞baabd〞,〞bcef〞,〞cfg〞,〞ahij〞,〞bkwte〞,〞ccdt〞,〞aayb〞〕,假设按照字符串的第一个字母进展划分,使得同一个字母被划分在一个子表中,那么得到的a,b,c三个子表的长度分别为〔3〕,〔3〕,〔2〕。
43、对于包含50个关键码的3阶B-树,其最小高度为〔4〕,最大高度为〔5〕。
44、从一棵B-树删除关键码的过程,假设最终引起树根结点的合并,那么新树比原树的高度〔减1〕
45、假定要对长度n=100的线性表进展散列存储,并采用开散列法处理冲突,那么对于长度m=20的散列表,每个散列地址的同义词子表的长度平均为〔5〕。
46、在散列存储中,装载因子α又称为装载系数,假设用m表示散列表的长度,n表示待散列存储的元素的个数,那么α等于〔n/m〕。
47、在有向图的邻接矩阵中,第i行中“1”的个数是第i个顶点的〔出度〕,第i列中“1”的个数是第i个顶点的〔入度〕。
在无向图的邻接矩阵中,第i行〔列〕中“1”的个数是第i个顶点的〔度〕,矩阵中“1”的个数的一半是图中的〔边数〕。
48、在对m阶B-树中,每个非根结点的关键码数最少为〔「m/2┐-1〕个,最多为〔m-1〕个,其子树棵数最少为〔「m/2┐〕,最多为〔m〕。
三、判断题
四、运算应用题
1、在一个有n个元素的顺序表的第i个元素〔1in〕之前插入一个新元素时,需要向后移动多少个元素?
答案:
需要向后移动n-i+1个元素
2、当一个栈的进栈序列为1234567时,可能的出栈序列有多少种?
6457321是否是合理的出栈序列?
答案:
可能的出栈序列有
种,6457321不是合理的出栈序列。
4、设有序顺序表为{10,20,30,40,50,60,70},采用折半搜索时,搜索成功的平均搜索长度是多少?
答案:
ASLsucc=(1*1+2*2+3*4)/7=17/7
5、在结点个数为n(n>1)的各棵树中,高度最小的树的高度是多少?
它有多少个叶结点?
多少个分支结点?
高度最大的树的高度是多少?
它有多少个叶结点?
多少个分支结点?
答案:
结点个数为n时,高度最小的树的高度为1,有2层;它有n-1个叶结点,1个分支结点;高度最大的树的高度为n-1,有n层;它有1个叶结点,n-1个分支结点。
6、一棵高度为h的满k叉树有如下性质:
第h层上的结点都是叶结点,其余各层上每个结点都有k棵非空子树,如果按层次自顶向下,同一层自左向右,顺序从1开场对全部结点进展编号,试问:
(1)各层的结点个数是多少?
(2)编号为i的结点的父结点(假设存在)的编号是多少?
(3)编号为i的结点的第m个孩子结点(假设存在)的编号是多少?
(4)编号为i的结点有右兄弟的条件是什么?
其右兄弟结点的编号是多少?
(5)假设结点个数为n,那么高度h是n的什么函数关系?
答案:
〔1〕各层的结点个数是ki(i=0,1,2,....,h)
〔2〕编号为i的结点的父结点(假设存在)的编号是└(i+k-2)/k」
〔3〕编号为i的结点的第m个孩子结点(假设存在)的编号是(i-1)*k+m+1
〔4〕当(i-1)%k<>0时有右兄弟,右兄弟的编号为i+1
〔5〕假设结点个数为n,那么高度h和n的关系为:
h=logk(n*(k-1)+1)-1(n=0时h=-1)
9、题目:
11、将下面的森林变换成二叉树〔7分〕。
A
C
D
B
F
E
K
J
G
H
I
A
C
D
B
F
E
K
J
G
H
I
答案:
10、将算术表达式((a+b)+c*(d+e)+f)*(g+h)转化为二叉树。
〔7分〕
*
+
+
+
f
+
*
+
c
b
a
h
g
d
e
答案:
12、将给定的图简化为最小的生成树,要求从顶点1出发。
〔7分〕
1
3
2
5
4
7
6
8
5
15
3
10
12
2
7
9
6
答案:
1
3
2
5
4
7
6
5
15
3
6
2
7
13、某子系统在通信联络中只可能出现8种字符,其出现的概率分别为0.05,0.29,0.07,0.08,0.14,0.23,0.03,0.11试设计赫夫曼编码。
答案:
为方便起见,设各种字符的权值w={5,29,7,8,14,23,3,11}。
因为n=8,所以要构造的赫夫曼树共有m=2n-1=2*8-1=15个结点。
生成的赫夫曼树为以下图所示:
23
11
5
3
29
14
7
8
0
0
0
0
0
0
0
1
1
1
1
1
1
1
赫夫曼编码为:
概率为0.23的字符编码为:
00
概率为0.11的字符编码为:
010
概率为0.05的字符编码为:
0110
概率为0.03的字符编码为:
0111
概率为0.29的字符编码为:
10
概率为0.14的字符编码为:
110
概率为0.07的字符编码为:
1110
概率为0.08的字符编码为:
1111
14、一棵二叉树的前序遍历的结果是ABECDFGHIJ,中序遍历的结果是EBCDAFHIGJ,试画出这棵二叉树,并给出这棵二叉树的后序遍历序列。
A
B
F
G