数据结构期末复习题集
一、选择题
-
下面关于串的叙述中,哪一个是不正确的?( B )
A.串是字符的有限序列 B.空串是由空格构成的串
C.模式匹配是串的一种重要运算 D.串既可以采用顺序存储,也可以采用链式存储
-
设无向图的顶点个数为n,则该图最多有( B)条边。
A.n-1 B.n(n-1)/2 C. n(n+1)/2 D.0
-
以下数据结构中,( A )是非线性数据结构。
A.树 B.字符串 C.队列 D.栈
-
下面关于线性表的叙述中,错误的是哪一个?( B )
A.线性表采用顺序存储,必须占用一片连续的存储单元。
B.线性表采用顺序存储,便于进行插入和删除操作。
C.线性表采用链接存储,不必占用一片连续的存储单元。
-
假设以数组A[m]存放循环队列的元素,其头尾指针分别为front和rear,则当前队列中的元素个数为( A )。
A.(rear-front+m)%m B.rear-front+1
C.(front-rear+m)%m D.(rear-front)%m
-
在单链表指针为p的结点之后插入指针为s的结点,正确的操作是( B )。
A.p->next=s; s->next=p->next; B.s->next=p->next; p->next=s;
C.p->next=s; p->next=s->next; D.p->next=s->next; p->next=s;
-
设栈的输入序列是1,2,3,4,则( D )不可能是其出栈序列。
A.1,2,4,3 B.2,1,3,4 C.1,4,3,2 D.4,3,1,2,
-
栈和队都是( C )
A.顺序存储的线性结构 B.链式存储的非线性结构
C.限制存取点的线性结构 D.限制存取点的非线性结构
-
从逻辑上可以把数据结构分为( C )两大类。
A.动态结构、静态结构 B.顺序结构、链式结构
C.线性结构、非线性结构 D.初等结构、构造型结构
-
下列四个序列中,哪一个是堆( C )。
A.75,65,30,15,25,45,20,10 B.75,65,45,10,30,25,20,15
C.75,45,65,30,15,25,20,10 D.75,45,65,10,25,30,20,15
-
在下述结论中,正确的是( D )
①只有一个结点的二叉树的度为0;
②二叉树的度为2;
③二叉树的左右子树可任意交换;
④深度为K的完全二叉树结点个数小于或等于深度相同的满二叉树。
A.①②③ B.②③④ C.②④ D.①④
-
若一棵二叉树具有10个度为2的结点,5个度为1的结点,则度为0的结点个数是( B )
A.9 B.11 C.15 D.不确定
(n0=n2+1)
-
在下面的程序段中,对x的赋值语句的频度为( C )。
for ( i=1;i< n;i++)
for( j=1;j<i;j++)
x=x+1;
A. O(2n) B.O(n) C.O(n2) D.O(log2n)
-
一个n个顶点的连通无向图,其边的个数至少为( A )。
A.n-1 B.n C.n+1 D.nlogn;
-
根结点在第1层的二叉树的第I层上最多含有结点数为( C )
A.2^I B. 2^(I-1)-1 C. 2^(I-1) D.2^I -1
-
下列排序算法中( C )排序在一趟结束后不一定能选出一个元素放在其最终位置上。
A.选择 B.冒泡 C.归并 D.堆
-
散列文件使用散列函数将记录的关键字值计算转化为记录的存放地址,因为散列函数是一对一的关系,则选择好的( D )方法是散列文件的关键。
A.散列函数 B.除余法中的质数
C.冲突处理 D.散列函数和冲突处理
-
在一个长度为n的顺序表中,向第i个元素(1≤i≤n+1)之前插入一个新元素时,需向后移动( B )个元素。
A. n-1 B. n-i+1 C. n-i-1 D. i
-
在一个具有n个单元的顺序栈中,假定以地址低端作为栈底,以top作为栈顶指针, 则当做退栈处理时,top变化为( C )。
A. top不变 B. top= -n C. top=top-1 D. top=top+1
-
向顺序栈中压入元素时,是 ( ) 。
A. 先存入元素,后移动栈顶指针 B.先移动栈顶指针,后存入元素
说明:若顺序栈top初始值为-1,则选B,若初始值为0,则可以选A
-
在一个顺序存储的循环队列中,队首指针指向队首元素的 ( C )。
A. 前一个位置 B. 后一个位置 C. 队首元素位置 D. 队尾元素位置
-
若进栈序列为1,2,3,4,进栈过程中可以出栈,则( C )不可能是一个出栈序列。
A. 3,4,2,1 B. 2,4,3,1 C. 1,4,2,3 D. 3,2,1,4
-
在具有n个单元的顺序存储的循环队列中,假定front和rear分别为队首指针和队尾指针,则判断队空的条件是( C ) 。
A. front= =rear+1 B. front+1= =rear C. front= =rear D. front= =0
-
在具有n个单元的顺序存储的循环队列中,假定front和rear分别为队首指针和队尾指针,则判断队满的条件是( D ) 。
A. rear % n= =front B. (rear-1) % n= =front
C. (rear-1) % n= =rear D. (rear+1) % n= =front
-
从一个具有n个节点的单链表中查找其值等于x结点时,在查找成功的情况下,需平均比较( D )个结点。
A. n B. n/2 C. (n-1)/2 D. (n+1)/2
-
在一个单链表中,已知*q结点是*p结点的前驱结点,若在*q和*p之间插入*s结点, 则执行( C )。
A. s->next=p->next; p->next=s; B. p->next=s->next; s->next=p;
C. q->next=s; s->next=p; D. p->next=s; s>next=q;
-
向一个带头结点的链栈中插入一个*s结点时,其中栈顶指针为hs,则执行( B)。
A. hs->next=s; B. s->next=hs->next; hs->next=s;
C. s->next=hs;hs=s; D. s->next=hs; hs=hs->next;
注:若不带头结点,C也可以
-
在一个链队列中,假定front和rear分别为队首指针和队尾指针,则进行插入*s结点的操作时应执行( B ) 。
A. front->next=s; front=s; B. rear->next=s; rear=s;
C. front=front->next; D. front=rear->next;
-
线性表是( A )。
A. 一个有限序列,可以为空 B. 一个有限序列,不能为空
C. 一个无限序列,可以为空 D. 一个无限序列,不能为空
-
对顺序存储的线性表,设其长度为n,在任何位置上插入或删除操作都是等概率的, 删除一个元素时大约要移动表中的( C )个元素。
A. n+1 B. n-1 C. (n-1)/2 D. n
-
线性表采用链式存储时,其地址( D )。
A. 必须是连续的 B. 部分地址必须是连续的
C. 一定是不连续的 D. 连续与否均可以
-
设单链表中指针p指着结点(数据域为m),指针f指着将要插入的新结点(数据域为x),当x插在结点m之后时,只要先修改( B )后修改p->link=f即可。
A. f->link=p; B. f->link=p->link;
C. p->link=f->link; D. f=nil;
-
根据线性表的链式存储结构,每个结点所含指针的个数,链表分为单链表和( B )。
A. 循环链表 B. 多重链表 C. 普通链表 D. 无头结点链表
-
在数据结构中,与所使用的计算机无关的数据叫( C )结构。
A. 存储 B. 物理 C. 逻辑 D. 物理和存储
-
二分法查找( A )存储结构。
A. 只适用于顺序 B. 只适用于链式 C. 既适用于顺序也适用于链式
D. 既不适合于顺序也不适合于链式
-
在线性表的链式存储结构中,逻辑上相邻的元素在物理位置上( B )。
A. 一定相邻 B. 不一定相邻 C. 有时相邻
-
设字符串s1='abcdefg',s2='pqrst',则运算 s=concat(sub(s1,2,len(s2)),sub(s1,len(s2),2))后串值为( D )。
-
'bcdef' B. 'bcdefg' C. 'bcpqrst' D. 'bcdefef'
注:concat连接字符串,sub求子串
-
假定在一棵二叉树中,双分支结点数为15个,单分支结点数为32个,则叶子结点数为 ( B )。
A. 15 B. 16 C. 17 D. 47
-
假定一棵二叉树的结点数为18个,则它的最小高度( B )。
A. 4 B. 5 C. 6 D. 18
-
在一棵二叉树(根结点所在的层为1)中第五层上的结点数最多为( C ) 。
A. 8 B. 15 C. 16 D. 32
-
在一棵具有五层的满二叉树中,结点总数为( A )。
A. 31 B. 32 C. 33 D. 16
-
已知8个数据元素为(34、76、45、18、26、54、92、65),按照依次插入结点的方法生成一棵二叉排序树后,最后两层上的结点总数为( B )。
A. 1 B. 2 C. 3 D. 4
-
由分别带权为9、2、5、7的四个叶子结点构造一棵哈夫曼树,该树的带权路径长度为 ( C )。
A. 23 B. 37 C. 44 D. 46
-
下面答案( D )是查找二叉树(又称二叉排序树)。
A. 二叉树中的每个结点的两棵子树的高度差的绝对值不大于1
B. 二叉树中的每个结点的两棵子树的高度差等于1
C. 二叉树中的每个结点的两棵子树是有序的
D. 二叉树中的每个结点的关键字大于其左子树(如果存在)所有结点的关键字值, 且小于其右子树(如果存在)所有结点的关键字值。
-
如果结点A有三个兄弟,而且B是A的双亲,则B的出度是( B )。
A. 3 B. 4 C. 5 D. 1
-
一个深度为L的满k叉树有如下性质:第L层上的结点都是叶子结点,其余各层上每个结点都有k棵非空子树。如果按层次顺序从1开始对全部结点编号,编号为n的有右兄弟的条件是( B )。
-
(n-1) % k= =0 B. (n-1) % k!=0 C. n % k= =0 D. n % k!=0
注:以满三叉树为例
-
在完全二叉树(结点编号从1开始)中,当i为奇数且不等于1时,结点i的左兄弟是结点( D ),否则没有左兄弟。
A. 2i-1 B. i+1 C. 2i+1 D. i-1
-
在一个有向图中,所有顶点的入度之和等于所有顶点的出度之和的( B )倍。
A. 1/2 B. 1 C. 2 D. 4
-
对于一个具有n个顶点和e条边的无向图,若采用邻接表表示,则表头向量的大小 为 ( A ) 。
A. n B. n+1 C. n-1 D. n+e
-
具有n个顶点的无向完全图,边的总数为( D )条。
A. n-1 B. n C. n+1 D. n*(n-1)/2
-
设图G有n个顶点和e条边,当G是非孤立顶点的连通图时有2e>=n,故可推得深度优先搜索的时间复杂度为( A )。(最坏的情况就是把所有的边都遍历了一边)
A. O(e) B. O(n) C. O(ne) D. O(n+e)
-
最小代价生成树( B )。
A.是唯一的 B.不一定是唯一的,但最小代价是唯一的。
-
在无向图G的邻接矩阵A中,若A[i,j]等于1,则A[j,i]等于( C ) 。
A. i+j B. i-j C. 1 D. 0
-
对于长度为9的顺序存储的有序表,若采用折半查找,在等概率情况下的平均查找长度为( C )。
A. 20/9 B. 18/9 C. 25/9 D. 22/9
-
已知一个有序表为(12、18、24、35、47、50、62、83、90、115、134),当二分查找值为90的元素时,( B )次比较后查找成功;当二分查找值为47的元素时,( D )次比较后查找成功。
A. 1 B. 2 C. 3 D. 4
-
散列函数有一个共同性质,即函数值应当以( D )取其值域的每个值。
A. 最大概率 B. 最小概率 C. 平均概率 D. 同等概率
-
设散列地址空间为0~m-1,k为关键字,用p去除k,将所得的余数作为k的散列地址,即H(k)=k % p。为了减少发生冲突的频率,一般取p为( D )。
A. 小于m的最大奇数 B. 小于m的最大偶数
C. m D. 小于等于m的最大素数
-
设关键字序列为:3,7,6,9,8,1,4,5,2。进行简单选择排序的最少交换次数是( A ) 。
A. 6 B. 7 C. 8 D. 20
-
一组记录排序码为(46、79、56、38、40、84),则利用堆排序的方法建立的初始堆为 ( B ) 。
A. (79、46、56、38、40、80) B. (84、79、56、38、40、46)
C. (84、79、56、46、40、38) D. (84、56、79、40、46、38)
-
一组记录的关键码为(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)
二、填空题
-
在线性结构中第一结点 无 前驱结点,其余每个结点有且只有 一 个前驱结点;最后一个结点 无 后继结点,其余每个结点有且只有 一 个后继结点。
-
在树型结构中,树根结点没有 父亲 结点,其余每个结点有且仅有 一 个父亲结点;树叶结点没有 孩子 结点,其余每个结点的 孩子 结点数不受限制。
-
广义表((((a),b),c),d,(c))的表头(head)是 (((a),b),c) ;表尾(tail)是 (d,(c)) 。
-
一个n阶下三角矩阵A按行优先顺序压缩存放在一维数组B中,则B中的元素个数是 n(n+1)/2+1 。 (需要一个元素,存储非下三角元素的值)
-
对于长度为n的顺序表,插入或删除元素的时间复杂性为 O(n) ;对于顺序栈或队列,插入或删除元素的时间复杂性为 O(1) 。
-
设有一顺序栈S,元素s1,s2,s3,s4,s5,s6依次进栈,如果6个元素出栈的顺序是s2,s3,s4, s6 , s5,s1,则栈的容量至少应该是 3 。
-
在线性表的顺序存储中,元素之间的逻辑关系是通过 下标 决定的;在线性表的链接存储中,元素之间的逻辑关系是通过 指针 决定的。
-
一棵结点总数为9的完全二叉树,有 5 个叶子结点。
-
单链表如下图,完成对它的基本操作
-
删除*p结点时,应执行如下操作:
(1)q=p->next;
(2)p->data=p->next->data;
(3)p->next= q->next ;
(4)free(q);
-
若要在一个单链表中的*p结点之前插入一个*s结点时,可执行如下操作
(1)s->next= p->next ;
(2)p->next=s;
(3)t=p->data;
(4)p->data= s->data ;
(5)s->data= t ;
-
无论对于顺序存储还是链接存储的栈和队列来说,进行插入或删除运算的时间复杂性均相同,则为 O(1) 。
┏0 0 2 0┓
-
一个稀疏矩阵为 ┃3 0 0 0┃,则对应的三元组线性表为
┃0 0 -1 5┃
┗0 0 0 0┛
{{0,2,2},{1,0,3},{2,2,-1},{2,3,5}} 。
-
对于一棵具有n个结点的树,则该树中所有结点的度之和为 n-1 。
-
在一棵二叉树中,度为0的结点的个数为n0 ,度为2的结点的个数为n2 ,则n0 = n2+1 。
-
在二叉树的顺序存储中(下标从1开始),对于下标为5的结点,它的双亲结点的下标为 2 , 若它存在左孩子,则左孩子结点的下标为 10 ,若它存在右孩子,则右孩子结点的下标为 11 。
-
若广义表表示为(b(c,d(e,f),g(h)),i(j,k(x,y))),则广义表的长度为 2 ,深度为 3 (假设根结点的层数为1) (长度的求法为最大括号中的逗号数加1,深度的求法为最大括号中每个元素的括号匹配数加1的最大值)
-
假定一棵二叉树的广义表表示为A(B(,D),C(E(,G),F)),则该树的深度为 4 , 度为0的结点数为 3 ,度为1的结点数为 2 ,度为2的结点数为 2 ;C结点是A 结点的 右 孩子,E结点是C结点的 左 孩子。
-
在一棵二叉排序树中,按 中序 遍历得到的结点序列是一个有序序列。
-
由分别带权为3,9,6,2,5的共五个叶子结点构成一棵哈夫曼树,则带权路径长度为 55 。
left |
data |
right |
-
假定在二叉树的链接存储中,每个结点的结构为
data为值域,left和right分别为链接左、右孩子结点的指针域,请在下面中序遍历算法 中画有横线的地方填写合适的语句。
void inorder(node *bt) (bt是指向结点的指针)
{ if (bt!=null ){
(1) inorder(bt->left) ;
(2) printf(bt->data) ;
(3) inorder(bt->right) ;}
}
-
在图G的邻接表表示中,每个顶点邻接表中所含的结点数,对于无向图来说等于该顶点的 度数 ,对于有向图来说等于该顶点的 出度数 。
-
假定一个无向连通网图具有n个顶点和e条边,则采用邻接矩阵表示的空间复杂性为 O(n2) , 采用邻接表表示的空间复杂性为 O(n+e) ,采用Prim算法求最小生成树的时间复杂度是 O(n2) ,采用克鲁斯卡尔算法求最小生成树的时间复杂度是 O(elog2e) 。
-
已知一个无向图的邻接矩阵如下所示,则从顶点A出发按深度优先搜索遍历得到的顶点序列为 ABCDFE ,按广度优先搜索遍历得到的顶点序列为ABCEFD 。
-
在索引查找或分块查找中,首先查找 索引表 ,然后再查找相应的 子表 ,整个索引查找的平均查找长度等于查找索引表的平均查找长度与查找相应子表的平均查找长度之 和 。
-
在散列存储中,装填因子α的值越大,存取元素时发生冲突的可能性就 大 ,当α的值越小,存取元素时发生冲突的可能性就 小 。
-
给定线性表(18,25,63,50,42,32,90),用散列方式存储,若选用h(K)=K % 9作为散列函数,则元素18的同义词元素共有 2 个,元素25的同义词元素共有 0 个,元素50的同义词元素共有 1 个。
-
在对一组记录(54,38,96,23,15,72,60,45,83)进行直接选择排序时,第四次选择和交换后,未排序记录(即无序表)为 (54,72,60,96,83) 。
-
已知一个图如下所示,在该图的最小生成树的代价为 47 。
-
给出从顶点1到顶点8的关键路径长度 97 。(最长路径)
-
假定在有序表A[1..20]上进行二分查找,则比较一次查找成功的结点数为 1 , 比较两次查找成功的结点数为 2 ,比较三次查找成功的结点数为 4 ,比较四次查找成功结点数为 8 ,比较五次查找成功的结点数为 5 ,平均查找长度为 74/20 。
-
在对一组记录(54,38,96,23,15,72,60,45,38)进行冒泡排序时,第一趟需进行相邻记录交换的次数为 7 ,在整个冒泡排序过程中共需进行 6 趟后才能完成。
注:这里是从后往前冒泡的结果
-
在归并排序中,若待排序记录的个数为20,则共需要进行 5 趟归并,在第三趟归并中,是把长度为 4 的有序表归并为长度为 8 的有序表。
-
在直接插入和简单选择排序中,若初始数据基本正序,则选用 直接插入 ,若初始数据基本反序,则选用 简单选择 。
-
在堆排序、快速排序和归并排序中,若只从节省空间考虑,则应首先选取 堆排序 方法,其次选取 快速排序 方法,最后选取 归并排序 方法;若只从排序结果的稳定性考虑,则应选取 归并排序 ;若只从平均情况下排序最快考虑,则应选取 快速 方法;若只从最坏情况下排序最快并且要节省内存考虑,则应选取 堆排序 方法。
三、判断题
-
数据元素是数据的最小单位( Ⅹ )。(数据项是最小单位,数据元素是基本单位)
-
数据项是数据的基本单位(Ⅹ)。
-
顺序存储的线性表可以随机存取( √ )。
-
线性表中的元素可以是各种各样的,但同一线性表中的数据元素具有相同的特性, 因此,是属于同一数据对象(√ )。
-
在单链表中,任何两个元素的存储位置之间都有固定的联系,因为可以从头结点查找任何一个元素( Ⅹ )。(链表中的元素的存储位置,没有固定联系)
-
在单链表中,要取得某个元素,只要知道该元素的指针即可,因此,单链表是随机存取的存储结构( Ⅹ )。 (顺序表才是随机存储)
-
链表的每个结点中,都恰好包含一个指针( Ⅹ )。(双向链表就有两个指针)
-
使用三元组表示稀疏矩阵的元素,有时并不能节省存储时间( √)。(如果非零元个数太多,就不节省时间了)
-
由树转换成二叉树,其根结点的右子树总是空的(√ )。(根结点没有兄弟)
-
后序遍历树和中序遍历与该树对应的二叉树,其结果不同(Ⅹ )。 (可能相同,也可能不同)
-
若有一个结点是某二叉树子树的中序遍历序列中的最后一个结点,则它必是该子树的前序遍历序列中的最后一个结点(√)。(都是最右的结点)
-
已知二叉树的前序遍历和后序遍历序列并不能唯一地确定这棵树,因为不知道树的根结点的左子树和右子树中分别包含哪些结点。(√ )
-
有回路的图不能进行拓扑排序( √ )。
-
连通分量是无向图中的极小连通子图( Ⅹ )。
-
散列法存储的基本思想是由关键码的值决定数据的存储地址( √ )。
-
散列表的查找效率取决于散列表造表时选取的散列函数和处理冲突的方法( √ )。
-
中序遍历二叉排序树的结点就可以得到排好序的结点序列( √)。
-
在二叉排序树上插入新的结点时,不必移动其它结点,仅需改动某个结点的指针, 由空变为非空即可( √ )。
-
当待排序的元素很多时,为了交换元素的位置,移动元素要占用较多的时间,这是影响时间复杂性的主要因素(Ⅹ)。(比较次数多才是主要因素)
-
对于n个记录的集合进行快速排序,所需要的平均时间是O(nlog2 n)(√)。
-
对于n个记录的集合进行归并排序,所需要的平均时间是O(nlog2 n)(√)。
-
堆中所有非终端结点的值均小于或等于(大于或等于)左右子树的值( √)。
-
顺序存储方式只能用于存储线性结构。( Ⅹ) (完全二叉树也可以顺序存储)
-
对任何数据结构链式存储结构一定优于顺序存储结构。(Ⅹ)
-
有向图的邻接矩阵是对称矩阵,无向图的邻接矩阵是非对称矩阵。(Ⅹ)
-
所有二叉树的度均为2。(Ⅹ )(均小于等于2)
-
满二叉树一定是完全二叉树,但完全二叉树不一定是满二叉树。(√)
-
循环链表不是线性表。 (Ⅹ )
-
线性表的特点是每个元素都有一个前驱和一个后继。( Ⅹ )(首个元素没有前驱)
-
按中序遍历二叉排序树所得到中序序列是一个递增有序序列。( √ )
-
若哈夫曼树中含有n个节点,则整一颗哈夫曼树中必然有2n-1个节点。(√)
- 树可以转换成二叉树,但不是所有的二叉树都可以转换成树。(√)(若二叉树根节点有右孩子,则会转换为多棵树的森林,因此由树转换过来的二叉树的根节点没有右孩子。)
四、简答题
-
线性表有两种存储结构:一是顺序表,二是链表。试问:
(1)如果有n个线性表同时并存,并且在处理过程中各表的长度会动态发生变化,线性 表的总数也会自动地改变。在此情况下,应选用哪种存储结构?为什么?
(2)若线性表的总数基本稳定,且很少进行插入和删除,但要求以最快的速度存取线性表中的元素,那么,应采用哪种存储结构?为什么?
答:(1)选用链表比较合适。因为这n个线性表需要频繁的插入和删除元素,则使用链表,可更方便插入和删除,且全局考虑,n个链表可以共享存储空间,所需要的总的空间大小,比顺序表要少。
(2)但若线性表总数稳点,插入和删除也很少,则使用顺序表更适合,因为其随机访问的特点,使得其在读数据的时候更快更方便。
-
何谓队列的上溢现象?解决它有哪些方法,且分别简述其工作原理。
答:队列上是指顺序队列中的队尾位置,已经超出了数组的位置,不能再插入元素了,若此时在数组的低端位置中还用空余的位置,则称为假溢出。解决的办法是,尽量把存储队列的空间定义得足够大(但这样很费空间),或者是当低端位置中有空余位置的时候,就把队列中的元素往前移动(但是这样又很费时),常用的方法就是使用循环队列,使得数组的最后一个元素的下一个元素位置变为数组的首个元素的位置。(另附:顺序循环队列,区分队空和队满的方法有:使用一个变量对队列中的元素进行计数,或者牺牲队列中的一个存储单元,当队列中只剩下一个单元的存储空间时,就认为是满了,则此时队列空的条件是:front==rear,队列满的条件是:(rear+1)%maxsize==front。)
-
简述二叉树与度小于等于2的有序树之间的区别。
答:二叉树是一定是度小于等于2的有序树,但是度小于等于2的有序树不等于而二叉树。二叉树的的子树是有严格的左右子树的分别,特别是当某结点只有一棵子树的时候,在有序树中是不区分左右性,但在二叉树中是区分左右性的。
-
若有5000个元素,如果仅要求求出其中最大的3个元素,会采用哪种排序算法最节省时间。
答:因为只需要去最大的3个元素,则使用冒泡、简单选择都能在每一趟中得到一个最值,所以比较省时。(堆也可以在每趟中得到最值,但是初始化建堆相对比较费时,所有不建议使用。)
-
有一个2000项的表,欲采用索引查找(分块)方法进行查找,问若每块长度为20,平均查找长度是多少?
答:把2000个元素分成20块,每块有100个元素,则索引表的表长就是100,子表是20,若索引表和子表内都是顺序查找,则平均查找长度是(100+1+20+1)/2=61
-
解析稠密图和稀疏图的定义,在邻接矩阵和邻接表两种图的存储结构中,稠密图适用哪种存储结构,稀疏图又适用哪种存储结构,为什么?
答:n阶图中的边的数量大于等于nlog2n,则可以称之为稠密图,否则就是稀疏图。稠密图选用邻接矩阵进行存储,而稀疏图则是选用邻接表存储。因为邻接矩阵存储的空间复杂度是O(n2),而邻接表的空间复杂度是O(n+e),当边数较多是就应该使用与边数无关的邻接矩阵,否则选用邻接表。
五、应用题
-
判断下列序列是否是堆。若不是堆,则把它们依次调整为堆。
-
(100,85,98,77,80,60,82,40,20,10,66);
把上面的序列构造一棵完全二叉树
,由此判断是大根堆
-
(100,98,85,82,80,77,66,60,40,20,10)
大根堆
-
(100,85,40,77,80,60,66,98,82,10,20);
,由此不是堆,调整后为
序列为(100,98,66,85,80,60,40,77,82,10,20)
-
(10,20,40,60,66,77,80,82,85,98,100);
小根堆
-
已知一组元素为(46、25、78、62、18、34、12、40、73),试画出按元素排列顺序输入而生成的一棵二叉排序树,并求其平均查找长度。
ASL=(1+2*2+3*3+4*3)/9
-
已知一棵二叉树先序遍历结果为ABCDEFGHIJ,中序遍历的结果为CBEDAHGIJF,试画出该二叉树。
-
设无向图G如下图:
试给出:
-
该图的邻接矩阵;
-
该图的邻接表;
-
该图的各顶点的度;
A |
B |
C |
D |
E |
F |
G |
2 |
2 |
2 |
4 |
2 |
2 |
2 |
-
从A出发的“深度优先”遍历序列;
ABDEGFC
-
从A出发的“广度优先”遍历序列。
ABCDEFG
-
假定一个待散列存储的线性表为(32、75、63、48、94、25、36、18、70),采用散列函数H(k)=k MOD 11,试画出以下两种情况的散列表,并求出在等概率情况下的平均查找长度。
由于H(k)=k%11,散列表长为11
H(32)=32%11=10 H(75)=75%11=9 H(63)=63%11=8 H(48)=48%11=4
H(94)=94%11=6 H(25)=25%11=3 H(36)=36%11=3 H(18)=18%11=7
H(70)=70%11=4
-
采用线性探查法处理冲突。
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
70 |
|
|
25 |
48 |
36 |
94 |
18 |
63 |
75 |
32 |
ASL=(1+1+1+1+1+1+3+1+8)/9
-
采用拉链法处理冲突。
ASL=(7+2*2)/9
-
假设用于通信的电文由字符集{a,b,c,d,e,f,g,h}中的字母构成。它们在电文中出现的频度分别为{27,10,12,6,30,3,21,15}。要求:
-
请为这8个字母设计哈夫曼编码,并画出对应的哈夫曼树;
a:00 b:1101 c:010 d:11001 e:10 f:11000 g:111 h:011
-
计算该哈夫曼树的最小加权路径长度WPL。
WPL=(27+30)*2+(12+15+21)*3+10*4+(3+6)*5
-
设图G=(V,E),其中V={A,B,C,D,E,F},其邻接矩阵如下所示。若将该图用邻接表存储,请写出图的邻接表。按照Prim方法,从顶点A出发,求该网的最小生成树的产生过程,并计算该最小生成树的代价值。
|
B |
C |
D |
E |
F |
adjvert |
A C |
A |
A C E |
A |
A E D |
lowcost |
∞ 5 0 |
10 0 |
∞ 50 20 0 |
30 0 |
100 60 10 0 |
最小生成树的边为BC、CA、DE、EA、FD
图 最小生成树
最小代价=10+30+10+20+5
注:克鲁斯卡尔算法求最小生成树请自行完成。
-
请画出利用下面的顺序存储结构表示的二叉树,#表示相应的位置没有结点存在。
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
A |
B |
# |
C |
D |
# |
# |
# |
E |
F |
G |
# |
# |
# |
# |
-
写出该二叉树的先序遍历,中序遍历,后序遍历及层次遍历结果。
先序:ABCEDFG
中序:CEBFDGA
后序:ECFGDBA
层序:ABCDEFG
-
将此二叉树用仿真指针孩子双亲表示法存储。
|
Parent |
Lchild |
Rchild |
A |
-1 |
1 |
-1 |
B |
0 |
2 |
3 |
C |
1 |
-1 |
4 |
D |
1 |
5 |
6 |
E |
2 |
-1 |
-1 |
F |
3 |
-1 |
-1 |
G |
3 |
-1 |
-1 |
-
对关键码序列(1, 5, 2, 4 , 6, 7, 8, 3),执行升序排序,写出以下排序算法在每一趟排序结束时的关键码序列。
-
冒泡排序;
第一趟:1, (2, 5, 3 , 4, 6, 7, 8)
第二趟:1, 2,(3, 5 , 4, 6, 7, 8)
第三趟:1, 2,3,(4 , 5, 6, 7, 8)
第四趟:1, 2,3, 4 ,(5, 6, 7, 8)
提前结束排序
-
简单选择排序
第一趟:1, (5, 2, 4 , 6, 7, 8, 3)
第二趟:1, 2, (5, 4 , 6, 7, 8, 3)
第三趟:1, 2, 3, (4 , 6, 7, 8, 5)
第四趟:1, 2, 3, 4 ,( 6, 7, 8, 5)
第五趟:1, 2, 3, 4 ,5, ( 7, 8, 6)
第六趟:1, 2, 3, 4 ,5, 6,( 8, 7)
第七趟:1, 2, 3, 4 ,5, 6, 8,(7)
-
希尔排序(d={5,2,1})
第一趟:(1, 5, 2, 4 , 6, 7, 8, 3)
第二趟:(1, 3, 2, 4 , 6, 5, 8, 7)
第三趟:(1, 2, 3, 4 , 5, 6, 7, 8)
-
请把图1的树转换为二叉树,对二叉树进行前,中,后,层序遍历,把图2的二叉树转换为树,对树进行先根,后根,层序遍历。
图1 图2
图1对应的二叉树为:
前序:ABEFICHJGD
中序:EIFBHJGCDA
后序:IFEGJHDCBA
层序:ABECFHDIJG
图2对应的树为:
先根序列:ABCEFGD
后根序列:BEGFCDA
层序序列:ABCDEFG
-
有如下图所示的带权有向图G,试回答以下问题。
-
给出G的一个拓扑序列
-
给出从顶点1到顶点8的最短路径
G的一个拓扑序列:1、2、4、6、5、3、7、8
S集 1(顶点) |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
1 |
6 1 |
∞ 1 |
1 1 |
∞ 1 |
50 1 |
∞ 1 |
∞ 1 |
1,4 |
6 1 |
∞ 1 |
|
13 4 |
50 1 |
∞ 1 |
∞ 1 |
1,4,2 |
|
49 2 |
|
12 2 |
50 1 |
∞ 1 |
∞ 1 |
1,4,2,5 |
|
49 2 |
|
|
50 1 |
36 5 |
∞ 1 |
1,4,2,5,7 |
|
49 2 |
|
|
50 1 |
|
56 7 |
1,4,2,5,7,3 |
|
|
|
|
50 1 |
|
56 7 |
1,4,2,5,7,3,6 |
|
|
|
|
|
|
56 7 |
1,4,2,5,7,3,6,8 |
|
|
|
|
|
|
|
所以,1到8最短路径为56,路径为:1->2->5->7->8
六、算法设计题
1、单链表的插入和删除,双向链表的插入和删除。
2、括号匹配算法。
3、二叉树的先序、中序、后续遍历的递归算法,求二叉树的高度的递归算法。
4、图的深度优先遍历的递归算法。