2022年江西农业大学计算机科学与技术专业《数据结构与算法》科目期末试卷A(有答案)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2022年江西农业大学计算机科学与技术专业《数据结构与算法》科目
期末试卷A(有答案)
一、选择题
1、下述文件中适合于磁带存储的是()。
A.顺序文件
B.索引文件
C.哈希文件
D.多关键字文件
2、设有一个10阶的对称矩阵A,采用压缩存储方式,以行序为主存储, a11为第一元素,其存储地址为1,每个元素占一个地址空间,则a85的地址为()。
A.13
B.33
C.18
D.40
3、若某线性表最常用的操作是存取任一指定序号的元素和在最后进行插入和删除运算,
则利用()存储方式最节省时间。
A.顺序表
B.双链表
C.带头结点的双循环链表
D.单循环链表
4、已知串S='aaab',其next数组值为()。
A.0123
B.1123
C.1231
D.1211
5、在下列表述中,正确的是()
A.含有一个或多个空格字符的串称为空格串
B.对n(n>0)个顶点的网,求出权最小的n-1条边便可构成其最小生成树
C.选择排序算法是不稳定的
D.平衡二叉树的左右子树的结点数之差的绝对值不超过l
6、循环队列放在一维数组A中,end1指向队头元素,end2指向队尾元素的后一个位置。
假设队列两端均可进行入队和出队操作,队列中最多能容纳M-1个元素。
初始时为空,
下列判断队空和队满的条件中,正确的是()。
A.队空:end1==end2;队满:end1==(end2+1)mod M
B.队空:end1==end2;队满:end2==(end1+1)mod (M-1)
C.队空:end2==(end1+1)mod M;队满:end1==(end2+1) mod M
D.队空:end1==(end2+1)mod M;队满:end2==(end1+1) mod (M-1)
7、若元素a,b,c,d,e,f依次进栈,允许进栈、退栈操作交替进行,但不允许连续三次进行退栈操作,则不可能得到的出栈序列是()。
8、已知一棵二叉树的前序遍历结果为ABCDEF,中序遍历结果为CBAEDF,则后序遍历结果为()。
A.CBEFDA
B.FEDCBA
C.CBEDFA
D.不定
9、每个结点的度或者为0或者为2的二叉树称为正则二叉树。
n个结点的正则二叉树中有()个叶子。
A.log2n
B.(n-1)/2
C.log2n+1
D.(n+1)/2
10、在平衡二叉树中插入一个结点后造成了不平衡,设最低的不平衡结点为A,并已知A 的左孩子的平衡因子为0,右孩子的平衡因子为l,则应作()型调整以使其平衡
A.LL
B.LR
C.RL
D.RR
二、填空题
11、如果按关键码值递增的顺序依次将关键码值插入到二叉排序树中,则对这样的二叉排序树检索时,平均比较次数为______。
12、阅读下列程序,指出其功能,并写出空格处应填上的语句。
13、如下的算法分别是后序线索二叉树求给定结点node的前驱结点与后继结点的算法,请在算法空格处填上正确的语句。
设线索二叉树的结点数据结构为(lflag,left,data,right,rflag),其中:lflag=0,left指向其左孩子,lflag=1,left指向其前驱;rflag=0,right指向其右孩子,rflag=1,right指向其后继。
14、按LSD进行关键字排序,除最次位关键字之外,对每个关键字进行排序时,只能用______的排序方法。
15、设有两个算法在同一机器上运行,其执行时闻分别为100n2和2n,要使前者快于后者,n至少为______。
16、阅读下列程序说明和程序,填充程序中的______。
【程序说明】本程序完成将二叉树中左、右孩子交换的操作。
交换的结果如下所示(编者略)。
本程序采用非递归的方法,设立一个堆栈stack存放还没有转换过的结点,它的栈顶指针为tp。
交换左、右子树的算法为:
(1)把根结点放入堆栈。
(2)当堆栈不空时,取出栈顶元素,交换它的左、右子树,并把它的左、右子树分别入栈。
(3)重复(2)直到堆栈为空时为止。
17、已知U=‘xyxyxyxxyxy’;t=‘xxy’;ASSIGN(S,U);ASSIGN(V, SUBSTR(S,INDEX(S,t),LEN(t)+1)); ASSIGN(m,’ww’),求REPLACE(S,V,m)
=______。
18、已知一循环队列的存储空间为[m..n],其中n>m,队头和队尾指针分别为front和rear,则此循环队列判满的条件是______。
三、判断题
19、对处理大量数据的外存介质而言,索引顺序存取方法是一种方便的文件组织方法。
()
20、文件系统采用索引结构是为了节省存储空间。
()
21、KMP算法的特点是在模式匹配时指示主串的指针不会变小。
()
22、一个广义表可以为其他广义表所共享。
()
23、用一维数组存储二叉树时,总是以前序遍历顺序存储结点。
()
24、一个树形的叶结点,在前序遍历和后序遍历下,皆以相同的相对位置出现。
()
25、归并排序辅助存储为O(1)。
()
26、数据元素是数据的最小单位。
()
27、当改变网上某一关键路径上任一关键活动后,必将产生不同的关键路径。
()
28、B-树中所有结点的平衡因子都为零。
()
四、简答题
29、对于具有n个叶结点且所有非叶结点都有左、右孩子的二叉树。
(1)试问这种二叉树的结点总数是多少?
(2)试证明2-(li-1)=1。
其中:l i表示第i个叶结点所在的层号(设根结点所在层号为1)。
30、假定对有序表:(3,4,5,7,24,30,42,54,63,72,87,95)进行折半查找,试回答下列问题:
(1)画出描述折半查找过程的判定树。
(2)若查找元素54,需依次与哪些元素比较?
(3)若查找元素90,需依次与哪些元素比较?
(4)假定每个元素的查找概率相等,求查找成功时的平均查找长度。
31、用单链表保存m个整数,节点的结构为(data,link),且|data|<n(n为正整数)。
现要求设计一个时间复杂度尽可能高效地算法,对于链表中绝对值相等的节点,仅保留
第一次出现的节点而删除其余绝对值相等的节点。
例如若给定的单链表head如下
删除节点后的head为
要求
(1)给出算法的基本思想
(2)使用C或C++语言,给出单链表节点的数据类型定义。
(3)根据设计思想,采用C或C++语言描述算法,关键之处给出注释。
说明所涉及算法的时间复杂度和空间复杂度。
五、算法设计题
32、给出以十字链表作存储结构,建立图的算法,输入(i,j,v),其中i,j为顶点号,v 为权值。
33、设T是一棵满二叉树,写一个把T的后序遍历序列转换为前序遍历序列的递归算法。
34、已知字符串s1中存放一段英文,写出算法format(s1,s2,s3,n),将其按给定的长度n格式化成两端对齐的字符串s2,其多余的字符送s3。
35、设有两个栈S1,S2都采用顺序栈方式,并且共享一个存储区 [0..maxsize-1],为了尽量利用空间,减少溢出的可能,可采用栈顶相向,迎面增长的存储方式。
试设计S1,S2有关入栈和出栈的操作算法。
参考答案
一、选择题
1、【答案】A
2、【答案】B
3、【答案】A
4、【答案】A
5、【答案】C
6、【答案】A
7、【答案】D
8、【答案】A
9、【答案】D
10、【答案】C
二、填空题
11、【答案】(n+1)/2
12、【答案】trai->link=ptr;ht[hash_value]=ptr
【解析】本题是在哈希表ht[]中插入值为item的元素,如该元素已在哈希表中,报告出错。
13、【答案】node->rflag==0;*x=bt;*x=node->right;prior(t,x)
14、【答案】稳定
15、【答案】15
16、【答案】stack[tp]=t;p=stack[tp--];p;++tp
【解析】本题主要使用堆栈完成了二叉树左右子树交换的操作。
首先根结点进栈,然后判
断栈是否为空,如果不为空,则取栈顶元素,交换取出结点的左右指针。
并将左右指针
分别进栈,重复这一操作。
完成二叉树左右孩子的交换。
17、【答案】’xyxyxywwy’
18、【答案】(rear+1)%(n-m+1)==front
三、判断题
19、【答案】×
20、【答案】×
21、【答案】√
22、【答案】√
23、【答案】×
24、【答案】√
25、【答案】×
26、【答案】×
27、【答案】×
28、【答案】√
四、简答题
29、答:(1)根据二叉树中度为2的结点个数等于叶结点个数减1的性质,故具有n个叶结点且非叶子结点均有左子树的二叉树的结点数是2n-1。
(2)证明:当i=1时,2-(1-1)=20=1,公式成立。
设当i=n-1时公式成立,证明当i=n时公
式仍成立。
设某叶结点的层号为t,当将该结点变为内部结点,从而再增加两个叶结点时,这两个叶结点的层号都是t+1,对于公式的变化,是减少了一
个原来的叶结点,增加了两个新叶结点,反映到公式中,因为2-(t-1)=2-(t+1-1)+2-
(t+1-1),所以结果不变,这就证明当i=n时公式仍成立。
证毕。
30、答:(1)判定树如图所示:
(2)若查找元素54,需依次和元素30、63、42、54比较,查找成功。
(3)若查找元素90,需依次和元素30、63、87、95比较,查找失败。
(4)
31、答:(1)算法思想:
算法的核心思想是用空间换时间。
定义一个大小为n的布尔数组flag,初始时所有的元素都赋值为false,用来标识遍历过程中是否出现元素绝对值为flag的节点。
然后遍历链表,遍历过程中,每一个当前结点data域的绝对值所对应的flag位:若为真,则删除该结点;若为假(false),则将flag位置为(true)。
(2)节点的数据结构定义如下:
(3)
(4)只遍历一次链表,所以时间复杂度为O(m)(m为单链表中元素的个数),申请大小为n的数组,所以空间复杂度为O(n)(n为节点绝对值的最大值)。
五、算法设计题
32、答:算法如下:
33、答:算法如下:
34、答:算法如下:
35、答:栈的定义:
(1)入栈操作:
(2)出栈操作。