2013-2014学年二学期数据结构期末考试模拟试卷(1~6卷)
一、应用题(3小题,共24分)
1.已知某字符串S中共有8种字符,各种字符分别出现2次、1次、4次、5次、7次、3次、4次和9次,对该字符串用[0,1]进行前缀编码,问该字符串的编码至少有多少位。
【解答】以各字符出现的次数作为叶子结点的权值构造的哈夫曼编码树如图所示。其带权路径长度=2×5+1×5+3×4+5×3+9×2+4×3+4×3+7×2=98,所以,该字符串的编码长度至少为98位。
2.已知关键码序列为(Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec),散列表的地址空间为0~16,设散列函数为H(x)=[ i/2 」(取下整数) ,其中i为关键码中第一个字母在字母表中的序号,采用链地址法处理冲突构造散列表,并求等概率情况下查找成功的平均查找长度。
【解答】H(Jan)=10/2=5, H(Feb)=6/2=3, H(Mar)=13/2=6, H(Apr)=1/2=0
H(May)=13/2=6, H(Jun)=10/25, H(Jul)=10/25, H(Aug)=1/2=0
H(Sep)=19/2=8, H(Oct) =15/2=7, H(Nov) =14/2=7, H(Dec) =4/2=2
采用链地址法处理冲突,得到的开散列表如下:
平均查找长度=(1×7+2×4+3×1)/12=18/12
3.
下面各程序段的时间复杂度
(1) s1(int n)
{ int p=1,s=0;
for (i=1;i<=n;i++)
{ p*=i;s+=p; }
return(s);
} ——O(n)
(2) s2(int n)
x=0;y=0;
For (k=1;k<=n;k++) x++;
For (i=1;i<=n;i++)
For (j=1;j<=n;j++)
y++; ——O(n2)
1.下述算法的功能是什么?
(1)
(1)返回结点*p的直接前趋结点地址。
(2)交换结点*p和结点*q(p和q的值不变)。
1.对给定的一组权值W=(5,2,9,11,8,3,7),试构造相应的哈夫曼树,并计算它的带权路径长度。【解答】构造的哈夫曼树如图所示。
WPL=2×4+3×4+5×3+7×3+8×3+9×2+11×2=120
2.已知散列函数H(k)=k mod 12,键值序列为(25, 37, 52, 43, 84, 99, 120, 15, 26, 11, 70, 82),采用链表法处理冲突,试构造散列表。
【解答】H(25)=1, H(37)=1, H(52)=4, H(43)=7, H(84)=0, H(99)=3,
H(120)=0, H(15)=3, H(26)=2, H(11)=11, H(70)=10, H(82)=10
构造的开散列表如下:
3.分析下面各程序段的时间复杂度
(1) for (i=0;i
说明它们相等。( ㄨ )
4.在线索二叉树中,任一结点均有指向其前趋和后继的线索。( ㄨ)
5.带权无向图的最小生成树是唯一的。( ㄨ )
6.稀疏矩阵的压缩存储可以用一个三元组表来表示稀疏矩阵中的非0元素。( √ )
7.无向图的邻接矩阵一定是对称的,有向图的邻接矩阵一定是不对称的。( ㄨ )
8.分块查找的平均查找长度不仅与索引表的长度有关,而且与块的长度有关。( √ )
1.由树转化成二叉树,该二叉树的右子树不一定为空。( ㄨ )
2.稀疏矩阵的压缩存储可以用一个三元组表来表示稀疏矩阵中的非0元素。( √ )
4.分块查找的平均查找长度不仅与索引表的长度有关,而且与块的长度有关。(√ )
5.设初始
关键字基本有序,则快速排序算法的时间复杂度为O(nlog2n)。( ㄨ )
6.每种数据结构都具备三个基本操作:插入、删除和查找。( ㄨ )
1.顺序表结构适宜于进行顺序存取,而链表适宜于进行随机存取。(×)
2.在线性表的链式存储结构中,逻辑上相邻的两个元素在物理位置上并不一定紧邻。√
3.链表的每个结点都恰好包含一个指针域。(×)
4.有向图的邻接表和逆邻接表中表结点的个数不一定相等。(×)
5.对连通图进行深度优先遍历可以访问到该图中的所有顶点。( √ )
6.当装填因子小于1时,向散列表中存储元素时不会引起冲突。(×)
2. 线性表的逻辑顺序和存储顺序总是一致的。(×)
3.非空的双向循环链表中任何结点的前驱指针均不为空。( √ )
4.子串“ABC”在主串“AABCABCD”中的位置为2。( √ )
5.数组是一种复杂的数据结构,数组元素之间的关系既不是线性的,也不是树形的。(×)
7.用邻接矩阵作为图的存储结构时,则其所占用的存储空间与图中顶点数无关而与图中边数有关。(×)
9.当装填因子小于1时,向散列表中存储元素时不会引起冲突。(×)
10.散列技术的查找效率主要取决于散列函数和处理冲突的方法。(×)
1.线性结构的基本特征是:每个元素有且仅有一个直接前驱和一个直接后继。(ㄨ )
2.稀疏矩阵压缩存储后,必会失去随机存取功能。(√ )
5.对任意一个图,从某顶点出发进行一次深度优先或广度优先遍历,可访问图的所有顶点。( ㄨ )
6.当向二叉排序树中插入一个结点,则该结点一定成为叶子结点。(√ )
7.数据的逻辑结构和数据的存储结构是相同的。( ㄨ)
8.数据的存储结构是数据的逻辑结构的存储映像。( √ )
三、单项选择题(8小题,共16分)
1.下面关于线性表的叙述错误的是( D )。
A 线性表采用顺序存储必须占用一片连续的存储空间
B 线性表采用链式存储不必占用一片连续的存储空间
C 线性表采用链式存储便于插入和删除操作的实现
D 线性表采用顺序存储便于插入和删除操作的实现
2.单链表的存储密度( C )。
A. 大于1 B. 等于1 C.小于1 D. 不能确定
3. 设输入序列为1、2、3、4、5、6,则通过栈的作用后可以得到的输出序列为( B )。
A 5,3,4,6,1,2 B 3,2,5,6,4,1
C 3,1,2,5,4,6 D 1,5,4,6,2,3
4.若串S="SOFTWARE",其子串的数目最多是:( C ) 。
A.35 B.36 C.37 D.38
5.二叉排序树中,最小值结点的(A )。
A 左指针一定为空 B 右指针一定为空
C 左、右指针均为空 D 左、右指针均不为空
6.在散列函数H(k)= k mod m中,一般来讲,m应取(C )。
A 奇数 B 偶数 C 素数 D 充分大的数
7.用直接插入排序对下面四个序列进行由小到大排序,元素比较次数最少的是( B )。
A 94, 32, 40, 90, 80, 46, 21, 69 B 21, 32, 46, 40, 80, 69, 90, 94
C 32, 40, 21, 46, 69, 94, 90, 80 D 90, 69, 80, 46, 21, 32, 94, 40
1.使用双链表存储线性表,其优点是可以(B )。
A 提高查找速度 B 更方便数据的插入和删除
C 节约存储空间 D 很快回收存储空间
2.链表不具有的特点是(B )
A.不必事先估计存储空间 B.可随机访问任一元素
C.插入删除不需要移动元素 D.所需空间与线性表长度成正比
3.下面关于线性表的叙述错误的是( D )。
A 线性表采用顺序存储必须占用一片连续的存储空间
B 线性表采用链式存储不必占用一片连续的存储空间
C 线性表采用链式存储便于插入和删除操作的实现
D 线性表采用顺序存储便于插入和删除操作的实现
4.从一个具有n个结点的单链表中查找其值等于x结点时,在查找成功的情况下,需平均比较( D )个结点。
A n B n/2 C (n-1)/2 D (n+1)/2
5.在C或C++语言中,一个顺序栈一旦被声明,其占用空间的大小( A )。
A.已固定 B.不固定 C.可以改变 D.动态变化
6. 两个字符串相等的充要条件是(C )。
A 两个字符串的长度相等 B 两个字符串中对应位置上的字符相等
C 同时具备(A)和(B)两个条件 D 以上答案都不对
8.设某二叉树中度数为0的结点数为N0,度数为1的结点数为Nl,度数为2的结点数为N2,则下列等式成立的是( C )。
A N0=N1+1 B N0=Nl+N2 C N0=N2+1 D N0=2N1+l
9.在含n个顶点和e条边的无向图的邻接矩阵中,零元素的个数为( D )
A.e B.2e C.n2-e D.n2-2e
10.设F是由T1、T2和T3三棵树组成的森林,与F对应的二叉树为B,T1、T2和T3的结点数分别为N1、N2和N3,则二叉树B的根结点的左子树的结点数为( A )。
A N1-1 B N2-1 C N2+N3 D N1+N3
11.设二叉树的先序遍历序列和后序遍历序列正好相反,则该二叉树满足的条件是(D )。
A 空或只有一个结点 B 高度等于其结点数
C 任一结点无左孩子 D 任一结点无右孩子
12.在堆排序和快速排序中,如果从平均情况下排序的速度最快的角度来考虑应最好选择( 快速 )排序,如果从节省存储空间的角度来考虑则最好选择( 堆 )排序。
13.设有以下四种排序方法,则( B )的空间复杂度最大。
A 冒泡排序 B 快速排序 C 堆排序 D 希尔排序
14.数据结构中,与所使用的计算机无关的是数据的(C )
A.存储结构 B.物理结构 C.逻辑结构 D.物理和存储结构
15.数据的基本单位是( B )。
A. 数据结构 B. 数据元素 C. 数据项 D. 文件
1.已知一个顺序存储的线性表,设每个结点占m个存储单元,若第一个结点的地址为B,则第i个结点的地址为( A )。
A. B+(i-1)*m B.B+i*m C. B-i*m D. B+(i+1)*m
3.若链表中最常用的操作是在最后一个结点之后插入一个结点和删除第一个结点,则采用(D )存储方法最节省时间。
A 单链表 B 带头指针的单循环链表
C 双链表 D 带尾指针的单循环链表
4.在解决计算机主机与打印机之间速度不匹配问题时通常设置一个打印缓冲区,该缓冲区应该是一个( B )结构。
A 栈 B队列 C 数组 D线性表
5.用链接方式存储的队列,在进行插入运算时( D ).
A. 仅修改头指针 B. 头、尾指针都要修改
C. 仅修改尾指针 D.头、尾指针可能都要修改
6.以下论述正确的是( C )。
A.空串与空格串是相同的 B."tel"是"Teleptone"的子串
C.空串是零个字符的串 D. 空串的长度等于1
7.对于完全二叉树中的任一结点,若其右分支下的子孙的最大层次为h,则其左分支下的子孙的最大层次为(C )。
A h B h+1 C h或h+1 D 任意
9.设哈夫曼树中的叶子结点总数为m,若用二叉链表作为存储结构,则该哈夫曼树中总共有(B )个空指针域。
A 2m-1 B 2m C 2m+1 D 4m
10.设某有向图中有n个顶点,则该有向图对应的邻接表中有( B )个表头结点。
A n-1 B n C n+1 D 2n-1
11.二叉排序树中左子树上所有结点的值均( A )根结点的值。
A < B > C = D !=
12.静态查找与动态查找的根本区别在于(B )。
A 它们的逻辑结构不一样 B 施加在其上的操作不同
C 所包含的数据元素的类型不一样 D 存储实现不一样
13.散列技术中的冲突指的是( D)。
A 两个元素具有相同的序号 B 两个元素的键值不同,而其他属性相同
C 数据元素过多 D 不同键值的元素对应于相同的存储地址
14.一组记录的关键码为{46, 79, 56, 38, 40, 84},则利用快速排序的方法,以第一个记录为基准得到的一次划分结果为( A )。
A {40, 38, 46, 56, 79, 84} B {40, 38, 46, 79, 56, 84}
C {40, 38, 46, 84, 56, 79} D {84, 79, 56, 46, 40, 38}
15.对一个算法的评价,不包括如下( B )方面的内容。
A.健壮性和可读性 B.并行性 C.正确性 D.时空复杂度
1.单链表的存储密度( C )。
A. 大于1 B. 等于1 C.小于1 D. 不能确定
2.设一个有序的单链表中有n个结点,现要求插入一个新结点后使得单链表仍然保持有序,则该操作的时间复杂度为( D )。
A O(log2n) B O(1) C O(n2) D O(n)
3.在下列链表中不能从当前结点出发访问到其余各结点的是( C )。
A.双向链表 B.单循环链表 C.单链表 D.双向循环链表
4.从一个栈顶指针为top的链栈中删除一个结点时,用x保存被删除的结点,应执行下列 ( D )命令。
A.x=top;top=top->next; B.top=top->next;x=top->data;
C.x=top->data; D.x=top->data;top=top->next;
5.设指针变量top指向当前链式栈的栈顶,则删除栈顶元素的操作序列为( D)。
A top=top+1; B top=top-1; C top->next=top; D top=top->next;
6.字符串的长度是指( C )。
A 串中不同字符的个数 B 串中不同字母的个数
C 串中所含字符的个数 D 串中不同数字的个数
7.数组的逻辑结构不同于下列( D )的逻辑结构。
A 线性表 B 栈 C 队列 D 树
8.设二叉树的先序遍历序列和后序遍历序列正好相反,则该二叉树满足的条件是( D )。
A 空或只有一个结点 B 高度等于其结点数
C 任一结点无左孩子 D 任一结点无右孩子
10.下图为由7个顶点组成的无向图。从顶点1出发,对它进行广度优先遍历得到的顶点序列是_____C______。
A、1534267 B、1726453 C、1354276 D、1247653
11.下列各种排序算法中平均时间复杂度为O(n2)是( D )。
A 快速排序 B 堆排序 C 归并排序 D 冒泡排序
====================================================================
2.对线性表,在下列哪种情况下应当采用链表表示?( B )
A.经常需要随机地存取元素 B.经常需要进行插入和删除操作
C.表中元素需要占据一片连续的存储空间 D.表中元素的个数不变
3.若用一个大小为6的数组来实现循环队列,且当前front和rear的值分别为3和0,当从队列中删除一个元素,再加入两个元素后,front和rear的值分别为( B )。
A.5和1 B.4和2 C.2和4 D.1和5
5. 设一棵三叉树中有2个度数为1的结点,2个度数为2的结点,2个度数为3的结点,则该三叉链权中有( C )个度数为0的结点。
A 5 B 6 C 7 D 8
6.任何一棵二叉树的叶子结点在前序、中序、后序遍历序列中的相对次序( A)。
A 肯定不发生改变 B 肯定发生改变 C 不能确定 D 有时发生变化
7.设某无向图中有n个顶点e条边,则建立该图邻接表的时间复杂度为( A )。
A O(n+e) B O(n2) C O(ne) D O(n3)
8.下面关于工程计划的AOE网的叙述中,不正确的是(B )
A 关键活动不按期完成就会影响整个工程的完成时间
B 任何一个关键活动提前完成,那么整个工程将会提前完成
C 所有的关键活动都提前完成,那么整个工程将会提前完成
D 某些关键活动若提前完成,那么整个工程将会提前完
9.下列命题正确的是( B)。
A 一个图的邻接矩阵表示是唯一的,邻接表表示也唯一
B 一个图的邻接矩阵表示是唯一的,邻接表表示不唯一
C 一个图的邻接矩阵表示不唯一的,邻接表表示是唯一
D 一个图的邻接矩阵表示不唯一的,邻接表表示也不唯一
10. 设某散列表的长度为100,散列函数H(k)=k % P,则P通常情况下最好选择( B )。
A 99 B 97 C 91 D 93
11.设一组初始记录关键字序列为(Q,H,C,Y,P,A,M,S,R,D,F,X),则按字母升序的第一趟冒泡排序结束后的结果是( D )。
A F,H,C,D,P,A,M,Q,R,S,Y,X
B P,A,C,S,Q,D,F,X,R,H,M,Y
C A,D,C,R,F,Q,M,S,Y,P,H,X
D H,C,Q,P,A,M,S,R,D,F,X,Y
==================================================================
1.线性表的链式链式存储结构是一种( B )的存储结构。
A、随机存取 B、顺序存取 C、索引存取 D、HASH存取
3.
一个判别表达式中左右括号是否配对的算法,采用(B )数据结构最佳
A 顺序表 B 栈 C 队列 D 链表
4.设栈S和队列Q的初始状态为空,元素e1、e2、e3、e4、e5、e6依次通过栈S,一个元素出栈后即进入队列Q,若6个元素出队的顺序是e2、e4、e3、e6、e5、e1,则栈S的容量至少应该是( C)。
A 6 B 4 C 3 D 2
5.设数组data[m]作为循环队列SQ的存储空间,front为队头指针,rear为队尾指针,则执行出队操作后其头指针front值为( D )
A.front=front+1 B.front=(front+1)%(m-1)
C.front=(front-1)%m D.front=(front+1)%m
7.广义表(a, b, (c, (d)))的表尾是( D )。
A (d) B (c,(d)) C b D (b,(c,(d)))
9.线索二叉树中某结点R没有左孩子的充要条件是( C )。
A R.lchild=NULL B R.ltag=0 C R.ltag=1 D R.rchild=NULL
10. 设一棵完全二叉树中有65个结点,则该完全二叉树的深度为( B )。
A 8 B 7 C 6 D 5
12.G是一个非连通无向图,共有28条边,则该图至少有( D)个顶点。
A 6 B 7 C 8 D 9
14.设有6个结点的无向图,该图至少应有( A )条边才能确保是一个连通图。
A.5 B.6 C.7 D.8
15.散列表的地址区间为0-17,散列函数为H(K)=K mod 17。采用线性探测法处理冲突,并将关键字序列26,25,72,38,8,18,59依次存储到散列表中。存放元素59需要搜索的次数是( C)
A、 2 B、 3 C、 4 D、 5
16. 设有5000个元素,希望用最快的速度挑选出前10个最大的,采用( B )方法最好。
A快速排序 B堆排序 C希尔排序 D 归并排序
四、算法设计题(2小题,共24分)
1.设计在顺序存储结构上实现求子串算法。
void substring(char s[ ], long start, long count, char t[ ])
{
long i,j,length=strlen(s);
if (start<1 || start>length) printf("The copy position is wrong");
else if (start+count-1>length) printf("Too characters to be copied");
else { for(i=start-1,j=0; i
data);
Postordern(H->rchild);
Postordern(H->lchild);
}
}
1.设计判断一棵二叉树是否是二叉排序树的算法。
int minnum=-32768, flag=1;
typedef struct node{
int key;
struct node *lchild,*rchild;
}bitree;
void inorder(bitree *bt)
{
if (bt!=0)
{ inorder(bt->lchild);
if(minnum>bt->key) flag=0;
minnum=bt->key;
inorder(bt->rchild);
}
}
2.设计顺序查找算法,将哨兵设在下标高端。
【解答】将哨兵设置在下标高端,表示从数组的低端开始查找,在查找不成功的情况下,算法自动在哨兵处终止。具体算法如下:
1.设计判断单链表中元素是否是递增的算法。
int isriselk(lklist *head)
{
if(head==0||head->next==0) return(1);
else
for(q=head,p=head->next; p!=0; q=p,p=p->next)
if(q->data>p->data) return(0);
return(1);
}
3.设计一个在链式存储结构上统计二叉树中结点个数的算法。
void countnode(bitree *bt,int &count)
{
if(bt!=0)
{count++; countnode(bt->lchild,count); countnode(bt->rchild,count);}
}
1. 对给定的带头结点的单链表L,编写一个删除L中值为X的结点的直接前趋结点的算法。
解:
void delete(ListNode *L)
{ ListNode *p=L,*q;
if (L->next->data==X)
{ printf (“值为x的结点是第一个结点,没有直接前趋结点可以删除”);
return;
}
for (;p->next->data!=X; q=p; p=p->next); // 删除指针p所指向的结点
q->next=p->next;
delete p;
}
1. 已知一个有向图的邻接表,编写算法建立其逆邻接表。
【解答】在有向图中,若邻接表中顶点vi有邻接点vj,在逆邻接表中vj一定有邻接点vi,由此得到本题算法思路:首先将逆邻接表的表头结点firstedge域置空,然后逐行将表头结点的邻接点进行转化。
五、填空题(6小题,共12分)
1.在单链表中要在已知结点*P之前插入一个新结点,需找到*P的直接前趋结点的地址,其查找的时间复杂度为( O(n) )。
2.设无向图G中有n个顶点e条边,所有顶点的度数之和为m,则e和m有( m=2e )关系。
3.顺序查找技术适合于存储结构为(顺序存储和链接存储 )的线性表
4.对n个元素进行起泡排序,在( 正序 )情况下比较的次数最少,其比较次数为( n-1 )。
5.快速排序算法的空间复杂度平均情况下为( O(nlog2n) ),最坏的情况下为( O(n) )。
6.树形结构结构中的元素之间存在( 一对多 )的关系
1.在双向链表中,每个结点都有两个指针域,它们一个指向其( 前趋 )结点,另一个指向其( 后继 )结点。
2.由两个栈共享一个存储空间的好处是( 节省存储空间,降低上溢发生的机率)
3.设循环队列存放在向量sq.data[0:M]中,若用牺牲一个单元的办法来区分队满和队空(设队尾指针sq.rear),则队满的条件为( (sq.rear+1)%(M+1)==sq.front; )。
4.设二叉树中结点的两个指针域分别为lchild和rchild,则判断指针变量p所指向的结点为叶子结点的条件是( p->lchild==0&&p->rchild==0 )。
5.深度为k的完全二叉树中最少有( 2k-1 )个结点。
6.设一棵二叉树的前序序列为ABC,则有( 5 )种不同的二叉树可以得到这种序列。
7.对于一棵具有n个结点的二叉树,用二叉链表存储时,其指针总数为( 2n )个,其中( n-1 )个用于指向孩子,( n+1 )个指针是空闲的。
8.度不为( 零 )的结点称为分支结点或非终端结点。树中各结点度的( 最大值)称为树的度。
9.设有向图G用邻接矩阵A[n][n]作为存储结构,则该邻接矩阵中第i行上所有元素之和等于顶点i的( 出度 ),第i列上所有元素之和等于顶点i的( 入度)。
10.N个顶点的强连通图的边数至少有( N )
11. 数据的物理结构主要包括( 顺序存储结构 )和( 链式存储结构 )两种情况。
12.假设线性表的长度为n,则在最坏情况下,冒泡排序需要的比较次数为( n(n-1)/2 )
13.算法的空间复杂度是指(执行过程中所需要的辅助存储空间)
14.顺序存储结构中数据元素之间的逻辑关系是由( 存储位置 )表示的,链接存储结构中的数据元素之间的逻辑关系是由( 指针 )表示的。
15.若算法中的语句执行次数之和为 T ( n )= 525 n +4 n log n ,则算法的时间复杂度是(
O ( n log n ) )。
1.可由一个尾指针唯一确定的链表有(循环链表 )、(双链表)。
2.在有n个元素的栈中,进栈操作的时间复杂度为( O(1) ),出栈操作的时间复杂度为( O(1) )。
3.在串 S="structure" 中,以 t 为首字符的子串有( 12 )个。
4.设有一个10阶的对称矩阵A采用压缩存储,A[0][0]为第一个元素,其存储地址为d,每个元素占1个存储单元,则元素A[8][5]的存储地址为(d+41. 元素A[8][5]的前面共存储了(1+2+…+8)+5=41个元素)。
5.广义表(a,(a,b),d,e,((i,j),k))的长度是( 5 ),深度是( 3 )。
6.一棵二叉树的第i(i≥1)层最多有(2i-1)个结点;一棵有n(n>0)个结点的满二叉树共有((n+1)/2 )个叶子结点和((n-1)/2 )个非终端结点。
8.评价基于比较的排序算法的时间性能,主要是( 关键码的比较次数 )和( 记录的移动次数 )。
9.实现数据结构的基本存储方法有:( 顺序存储结构 ),( 链接存储结构 )。
1.循环队列的队首指针为front,队尾指针为rear,则队空的条件为( front == rear )。
2.串是一种特殊的线性表,其特殊性体现在( 数据元素是一个字符 )。
3.已知线性表A采用顺序存储结构,每个元素占用4个存储单元,第9个元素的地址为144,则第一个元素的地址是( 112 )。
4.完全二叉树总结点数为N,若N为奇数,则叶子结点数为( (N+1)/2 );若N为偶数,则叶子结点数为( N/2 )。
5.已知一棵完全二叉树中共有768结点,则该树中共有( 384 )个叶子结点。
6.设一棵完全二叉树中有500个结点,则该二叉树的深度为( 9 );若用二叉链表作为该完全二叉树的存储结构,则共有( 501 )个空指针域。
7.对于含有n个顶点e条边的连通图,利用Prim算法求最小生成树的时间复杂度为(O(n2) ),利用Kruskal算法求最小生成树的时间复杂度为(O(elog2e) )。
8.若G为有向图,则至少有( 0)条边,至多有(n(n-1))条边
9.表示一个有100个顶点,1000条边的有向图的邻接矩阵有(1000 )个非零矩阵元素。
10.在各种查找方法中,平均查找长度与结点个数无关的查找方法是(散列查找(哈希法) )。
11.若一个算法中的语句频度之和为T(n)=3n+nlog2n+n2,则算法的时间复杂度为( O(n2) )
1.对一个需要经常进行插入和删除操作的线性表,采用( 链式 )存储结构为宜。
2.不论是顺序存储结构的栈还是链式存储结构的栈,其入栈和出栈操作的时间复杂度均为( O(1) )。
3.完全二叉树中第5层上最少有( 1 )个结点,最多有( 16 )个结点。
4.在一个具有n个顶点的无向完全图中,包含有( n(n-1)/2 )条边,在一个具有n个顶点的有向完全图中,包含有( n(n-1) )条边。
5.在无向图的邻接矩阵中,第i行(列)中“1”的个数是第i个顶点的 度 ,矩阵中“1”的个数的一半是图中的 边数 。
7.对n个元素进行起泡排序,在( 正序 )情况下比较的次数最少,其比较次数为( n-1 )。
9.for(i=1,t=1,s=0;i<=n;i++) {t=t*i;s=s+t;}的时间复杂度为( O(n) )。
1.顺序表中访问任意一个结点的时间复杂度均为( O(1) )。
6.设哈夫曼树中共有n个结点,则该哈夫曼树中有( 0 )个度数为1的结点。
8.一棵有n个结点的满二叉树有((n-1)/2 )个分支结点和((n+1)/2 )个叶子。
10.设一棵二叉树中有3个叶子结点,有8个度为1的结点,则该二叉树中总的结点数为( 13 )
11.具有n个结点的完全二叉树若按层次从上到下、从左到右对其编号(根结点为1),则编号最大的叶子结点序号是( N ),编号最小的叶子结点序号是( )。
12.设二叉树中度数为0的结点数为50,度数为1的结点数为30,则该二叉树中总共有( 129 )个结点数。
13.若G为有向图,则至少有( 0 )条边,至多有(n(n-1) )条边
16.假定一个数列{25,43,62,31,48,56},采用的散列函数为H(k)=k mod 7,则元素48的同义词是( 62 )。
17.对于键值序列(12,13,11,18,60,15,7,18,25,100),用筛选法建堆,必须从键值为( 60 )的结点开始。
六、简答题(2小题,共10分)
1.下图所示是一个无向带权图,请按Prim算法从a出发求最小生成树。
【解答】按Prim算法求最小生成树的过程如下:
2.求下列算法的时间复杂度。
count=0; x=1;
while (x {
x*=2;
count++;
}
return count;
——O(log2n)
1. 已知一组记录的排序码为(46,79,56,38,40,80, 95,24),写出对其进行快速排序的前两趟的划分结果。
第一趟: [38 24 40] 46 [56 80 95 79]
第二趟: 24 [38 40] 46 [56 80 95 79]
七、名词解释(1小题,共5分)
1.简述下列概念:逻辑结构、存储结构
逻辑结构:指各数据元素之间的逻辑关系。
存储结构:就是数据的逻辑结构用计算机语言的实现。