全国计算机二级考试数据结构与算法.docx
《全国计算机二级考试数据结构与算法.docx》由会员分享,可在线阅读,更多相关《全国计算机二级考试数据结构与算法.docx(13页珍藏版)》请在冰豆网上搜索。
全国计算机二级考试数据结构与算法
全国计算机二级考试
第一章数据构造与算法
1.一种算法普通都可以用_____、_____、_____三种控制构造组合完毕。
[解析]顺序、选取(分支)、循环(重复)
一种算法普通由两种基本要素构成:
一是对数据对象运算和操作,二是________。
[解析]算法控制构造
在普通计算机系统中,有算术运算、逻辑运算、关系运算和________四类基本操作和运算。
[解析]数据传播
2.惯用于解决“与否存在”或“有多少种也许”等类型问题(例如求解不定方程问题)算法涉及基本办法是()
A.列举法B.归纳法C.递归法D.减半递推法
[解析]列举就是列举出所有也许性,将所有也许性统统列举出来,然后解决问题办法。
因此A
3.依照提出问题,列举所有也许状况,并用问题中给定条件检查哪些是需要,哪些是不需要,这是算法设计基本办法中____。
[解析]列举法
4.通过列举少量特殊状况,通过度析,最后找出普通关系算法设计思想是()
A.列举法B.归纳法C.递归法D.减半递推法
[解析]B
5.在用二分法求解方程在一种闭区间实根时,采用算法设计技术是()
A.列举法B.归纳法C.递归法D.减半递推法
[解析]二分法就是从一半处比较,减半递推技术也称分治法,将问题减半。
因此D
6.将一种复杂问题归结为若干个简朴问题,然后将这些较简朴问题再归结为更简朴问题,这个过程可以始终做下去,直到最简朴问题为止,这是算法设计基本办法中___。
如果一种算法P显式地调用自己则称为___。
如果算法P调用另一种算法Q,而算法Q又调用算法P,则称为_____.
[解析]递归法直接递归间接递归调用
7.算法中各操作之间执行顺序称为_____。
描述算法工具普通有_____、_____、_____。
[解析]控制构造老式流程图、N-S构造化流程图、算法描述语言
8.从已知初始条件出发,逐渐推出所规定各中间成果和最后成果,这是算法设计基本办法中()
[解析]递推法
9.将问题规模减半,而问题性质不变,再重复“减半”过程,这是算法设计基本办法中()
[解析]减半递推技术
10.通过对问题分析,找出一种解决问题线索,然后沿着这个线索逐渐试探,对于每一步试探,若试探成功,就得到问题解,若试探失败,就逐渐回退,换别路线再试探,这是算法设计基本办法中
[解析]回溯法
1.下列论述中对的是
A.顺序存储构造存储一定是持续,链式存储构造存储空间不一定是持续
B.顺序存储构造只针对线性构造,链式存储构造只针对非线性构造
C.顺序存储构造能存储有序表,链式存储构造不能存储有序表
D.链式存储构造比顺序存储构造节约存储空间
[解析]顺序存储构造中各数据元素在存储空间中是按照逻辑顺序依次持续存储,在链式存储构造中元素之间关系通过指针来连接,因此不规定存储空间一定是持续;顺序存储构造(或链式存储构造)既可以针对线性构造,也可以针对非线性构造,但像栈、队列这样线性构造普通采用顺序存储构造(但也可以采用链式构造);树、二叉树这样非线性构造普通采用链式存储构造(但也可以采用顺序存储构造);链式存储构造既可以存储无序表,也可以存储有序表,注意,链式存储构造存储虽然是有序表,也不能进行二分查找;链式存储构造比顺序存储构造要多使用存储空间,由于链式存储构造中要用额外空间来保存指针。
因此A
顺序存储方式重要用于线性数据构造,它把逻辑上相邻数据元素存储在物理上相邻存储单元里,结点之间关系由存储单元邻接关系来体现。
而链式存储构造存储空间不一定是持续。
2.数据存储构造是指()
A.存储在外存中数据B.数据所占存储空间量
C.数据在计算机中顺序存储方式D.数据逻辑构造在计算机中体现
[解析]数据逻辑构造是指数据元素之间逻辑关系数据构造。
数据存储构造则是数据逻辑构造在计算机中物理实现,有时也称作数据物理构造。
两者区别是数据逻辑构造只涉及到数据之间抽象数学关系,存储构造则涉及到如何在计算机中通过对数据物理存储进行组织来表达数据元素之间逻辑关系。
例如在线性表顺序存储中是运用物理存储空间上持续性来表达线性表中数据先后件关系;在线性表链式存储中是通过指针域构成逻辑链条来表达数据先后件关系。
普通,一种数据逻辑机构相应物理实现,即数据存储构造不止一种。
因此D
3.在长度为n顺序存储构造线性表中,要在第i(1≤i≤n)个元素之前插入一种新元素,则需要移动表中()个元素,表长度变为();若删除表中第i(1≤i≤n)个元素,则需要移动表中()个元素,表长度变为()。
[解析]n-i+1;n+1;n-i;n-1
4.一种栈初始状态为空。
现将元素1、2、3、4、5、A、B、C、D、E依次入栈,然后再依次出栈,则元素出栈顺序是()
A.12345ABCDEB.EDCBA54321C.ABCDE12345D.54321EDCBA
[解析]栈是按照“先进后出(FILO)”或“后进先出(LIFO)”原则组织数据,栈职能在栈顶插入数据(称为入栈)和删除数据(称为出栈)。
现将元素1、2、3、4、5、A、B、C、D、E依次入栈,然后再依次出栈,则元素出栈顺序是EDCBA54321。
因此B
5.下列关于栈描述中错误是()
A.栈是先进后出线性表B.栈职能顺序存储
C.栈具备记忆作用D.对栈插入与删除操作中,不需要变化栈底指针
[解析]栈是一种先进后出线性表;栈既可以顺序存储,也可以链式存储;栈可以用开保护断点信息,具备记忆作用;只容许在栈顶插入和删除元素,因此对栈插入与删除操作,不要用变化栈底指针
1.线性表存储构造重要分为顺序存储构造和链式存储构造。
队列是一种特殊是线性表,循环队列是队列_______存储构造。
[解析]顺序
2.数据构造分为线性构造和非线性构造,带链队列属于______
[解析]线性总结:
惯用数据构造例如:
线性表、栈、队列是线性构造(不论是采用顺序存储还是链式存储构造);树、二叉树、图都是非线性构造(不论是采用顺序存储构造还是链式存储构造)
3.已知元素入栈顺序为abcde,则下列哪种出栈顺序是不也许?
()
A.edcbaB.cabdeC.dcbaeD.bcdea
[解析]abcde依次入栈,再再次出栈,得到出栈顺序edcba,因此选项A也许;选项B,第一种出栈是C,可以必定栈中有b、a,等待入栈是d、e,此时出栈也许是b或d(d入栈立即出栈),不也许是a,因此选项B不也许;选项C,第一种出栈是d,可以必定栈中有c、b、a,等待入栈是e,此时出栈也许是c或e,若c、b、a依次出栈,e入栈立即出栈,刚好得到出栈顺序dcbae,因而选项C也许;选项D,第一种出栈是b,可以必定栈中有a,等待入栈是c、d、e,c、d、e分别入栈又出栈得到出栈顺序bcde,最后a出栈,行号得到出栈顺序bcdea,因此选项D也许。
因而本题对的答案是B。
4.如果刚开始时栈为空,依次有A、B、C、D四个元素入栈,此时栈底指针指向元素___,栈顶指针值为___(如果每个元素长度为1)。
执行四次出栈操作后把E、F、G压入栈,问此时栈底指针指向元素___,此时栈长度为___.
[解析]A;4;E;3
5.下列论述中对的是
A.循环队列有对头和队尾两个指针,因而,循环队列是非线性构造
B.在循环队列中,只需要对头指针就能反映队列中元素动态变化状况
C.在循环队列中,只需要队尾指针就能反映队列中元素动态变化状况
D.循环队列中元素个数是由对头指针和队尾指针共同决定
[解析]所谓循环队列,就是将队列存储空间最后一种位置绕到第一种位置,形成逻辑上环状空间,供队列循环使用。
在循环队列中,用队尾指针rear指向队列中队尾元素,用排头指针front指向排头元素前一种位置,因而,从排头指针front指向后一种位置直到队尾指针real指向位置之间所有元素均为队列中元素。
求解队列中元素个数办法是:
若front>rear,队列中有n-front+rear个元素(其中n为循环队列容量);若front<rear,队列中有real-front个元素;若front=rear,队列中有n个或0个元素。
循环队列是线性构造。
因此D
6.在一种容量为15循环队列中,若头指针front=6,尾指针rear=4,则该循环队列中共有_____个元素;若front=4,rear=6,则该循环队列中有_____个元素;若front=6,rear=6,则该循环队列中共有_____个元素。
[解析]本题重要考核对循环队列存储形式和入队运算、出队运算理解。
求解队列中元素个数办法是:
1.若front>rear,队列中有n-front+rear个元素(其中n为循环队列容量);
2.若front<rear,队列中有real-front个元素;
3.若front=rear,队列中有n个或0个元素。
循环队列是线性构造。
因此13;2;0或15
1.下列对于线性链表描述中对的是()
A.存储空间不一定是持续,且各元素存储顺序是任意
B.存储空间不一定是持续,且前件元素一定存储在后件元素前面
C.存储空间必要持续,且前件元素一定存储在后件元素前面
D.存储空间必要持续,且各元素存储顺序是任意
[解析]线性链表是通过增长一种指针域来把相邻数据元素链接成一种线性序列。
线性链表这种构造使得它存储数据空间可以是离散,并不像顺序表那样一定规定物理上持续空间。
因此A
2.在线性链表插入算法中,若要把结点q插在结点p背面,下列操作对的是()
A.使结点p指向结点q,再使结点q指向结点p后件结点
B.使结点q指向p后件结点,再使结点p指向结点q
C.使结点q指向结点P,再使结点P指向结点q后件结点
D.使结点p指向q后件结点,再使结点q指向结点p
[解析]在修改结点指针域操作中,有一种操作顺序问题。
比较选项A和B只是操作顺序颠倒了一下。
A中先使结点p指向q后,q就称为p新后件结点了,原先通过结点p指向后件结点与结点p脱节了那么背面一步操作没有任何意义。
使结点q指向p后件结点虽然结点q成为自己后件结点。
按照B指定顺序操作就不会浮现引用结点p指针域之前已经把它值修改了情形。
至于C和D是命题者设计干扰项想让考生把p和d顺序搞混。
总结,做这种类型试题,最佳画图。
插入结点:
若结点p背面是结点s,要在p和s之间插入结点q,普通先将结点q指向结点s,再讲结点p指向q,顺序不能颠倒。
删除结点:
若结点p背面是结点q,结点q背面是结点s,若要删除结点q,只需将结点p指向s即可。
3.在长度为64有序线性表中进行顺序查找,最坏状况下需要比较次数为()
A.63B.64C.6D.7
[解析]只要是顺序查找(不论线性表是有序还是无序),都是从表头到表尾逐个比较,若相似则结束查找,否则始终继续比较下一种表中元素,指引整个表都遍历完。
对于长度为64线性表,平均要进行64/2=321次比较,在最坏状况下要进行64次比较。
若采用二分(折半)查找,则最坏状况下需要比较次数为log264=6次,弹药注意采用二分(折半)查找条件,必要是线性表采用顺序存储构造,并且线性表中元素要有序,这两个条件缺一不可。
若对线性链表进行查找,则不论线性链表中元素是有序还是无序职能采用顺序查找。
因而本题B.
4.在一种n×m二维线性表中顺序查找一种数据元素算法时间复杂度是()
A.O(n+m)B.O(n×m)C.O(n2)C.O(m2)
[解析]在一维线性表中顺序查找一种数据元素算法时间复杂度是O(n),其中n是线性表长度,二维线性表顺序查找办法和一维线性表相似,只但是是多了一维罢了。
在二维表中进行顺序查找有两个办法:
一是把二维线性表当作是n个长度为m一维线性表,顺序查找就是对这n个一维线性表依次实行顺序查找,因而它算法时间复杂度是O(n)×O(m)=O(n×m);二是直接把n×m二维线性当作一种n×m一维线性表,那么在它当中用顺序查找法查找一种元素算法时间复杂度是O(n×m)。
5..下列论述中对的是()
A.线性链表是线性链式存储构造B.栈与队列是非线性构造
C.双向链表是非线性构造D.只有根结点二叉树是线性构造
[解析]线性表链式存储构造称为线性链表;栈、队列、双向链表都是线性构造;树、二叉树(不论它有多少个结点)都是非线性构造。
因此A
6.下列关于链表构造论述对的是()
A.线性链表、带链栈和带链队列结点构造都是相似
B.双向链表也就是循环链表
C.线性链表与带链结点构造是不同
D.在循环链表中通过任意一种结点可以找到链表中其她所有结点,而在双向链表中做不到这一点
[解析]A、C线性链表、带链栈和带链队列:
结点(表达数据元素)=数据域(数据元素映像)+指针域(批示后继元素存储位置)。
B、D双向链表:
也叫双链表,是链表一种,它每个数据结点中均有两个指针,分表指向直接后继和直接前驱。
循环链表:
循环链表是另一种形式链式存储构造,它特点是表中最后一种结点指针域指向头结点,整个链表形成一种环。
1.一棵度数为4树,它4度结点有1个,3度结点有2个,2度结点有3个,1度结点4个,问它叶子结点有多少个?
A.5B.6C.9D.11
[解析]如果注意观测树构造,你会发现树中结点数总是比树中分支数多,其实也可以这样理解:
如果在根结点前面加一条分支线,那么分支数和结点数就同样多了。
在树结点里,n度结点可以射出条分支,叶子结点是0度结点,因而它射出分支数为0。
此题中指引了1到4度结点个数,就可以计算出树总分支数:
4×1+3×2+2×3+1×4=20.因而树总结点数是21,减去其她读书结点数10就得到0度结点(叶子结点)个数11了。
因此D
2.在深度为7满二叉树中,叶子结点个数为()
A.32B.31C.64D.63
[解析]在满二叉树中每层结点数都达到最大值,并且叶子结点所有出当前最底层。
第1层(根结点所在层)有20个结点,第2层有21个结点,……第n层有2n-1个结点。
在深度为7满二叉树中,第7层有27-1=64个结点(所有是叶子结点),在深度为7满二叉树中,共有27-1=64个结点,本题为C
3.某二叉树有5个度为2结点,则该项树中叶子结点数是()
A.10B.8C.6D.4
[解析]依照二叉树性质,在任意二叉树中,度为0结点(即叶子结点)数总是比度为2结点数多一种。
因此C
4.某二叉树中有n个度为2结点,则该二叉树中叶子结点为()
A.n+1B.n-1C.2nD.n/2
[解析]二叉树具备这样一种性质:
在任意一棵二叉树中,度为0结点(叶子结点)总是比度为2结点多一种。
因此某二叉树中共有n个度为2结点,则该二叉树叶子结点数为n+1。
因此本题为A
5.一科二叉树中共有70个叶子结点和80个度为1结点,该二叉树总结点数为()
A.219B.221C.229D.231
[解析]二叉树具备这样一种性质:
在任意一棵二叉树中,度为0结点(叶子结点)总是比度为2结点多一种。
本题告知,叶子结点有70个,那度为2结点既有69个,度为1结点有80个,这颗二叉树共有70+69+80=219个结点。
因此A
6.在深度为7满二叉树中,度为2结点个数为()
[解析]满二叉树定义是除最后一层外,每一层所有结点均有两个子结点(即每一层上结点数均达到最大值)。
第1层(根结点在第1层)拥有结点数是20=1,第2层拥有结点数是21=2,第3层拥有结点数是22=4,……,第n层拥有结点数是2n-1。
在深度为7满二叉树中,叶子结点所有在第7层,别的结点都是2度结点。
在满二叉树中,第7层拥有结点数是27-1=64。
二叉树具备这样一种性质:
在任意一棵二叉树中,度为0结点(即叶子结点)总是比度为2结点多一种,因此度为2结点个数为64-1=63。
7.具备8个结点完全二叉树中编号为4结点右子结点编号为()
A.8B.9C.无此结点D.8或9
[解析]设完全二叉树共有n个结点,如果从根结点开始,按层序(每一层从左到右)用自然数1,2,…,n给结点进行编号(i=1,2,…,n),有如下结论:
1.若i=1,则该结点为根结点,它没有父结点;若i>1,则该结点父结点编号为[i/2];其中[i/2]表达取i/2整数某些。
2.若2i>n,该结点无左子结点(也无右子结点);若2i≤n,则编号为i结点左子结点编号为2i;
3.若2i+1>n,该结点无右子结点;若2i+1≤n,则编号为i结点右子结点编号为2i+1。
因此本题为C
1.设一棵二叉树中序遍历成果为DBEACF,前序遍历成果为ABDECF,则后续遍历成果为()
[解析]咱们可以依照前序遍历成果ABDECF,拟定第一种元素A是根结点,再看中序遍历成果DBEACF,A前面DBE应当在左子树,A背面FC应当在右子树。
依照前序遍历成果和中序遍历成果,咱们可以推导出:
A是根结点,B是A左结点,D是B左结点,E是B右结点,C是A右结点,F是C右结点。
画出二叉图,对后续遍历成果为DEBFCA.
2.树是一种简朴______构造,在树中,所有数据元素之间关系具备明显______特性。
[解析]非线性;层次
3.拥有奇数个结点完全二叉树中有4个内部结点(非叶子结点),请问它叶子结点数是
[解析]5[分析]由于完全二叉树是自上而下、自左而右从1开始持续编码,因而完全二叉树要么不存在一度结点(当结点个数为奇数个数时),要么存在一种一度结点,并且唯一一种一度结点就是最后编号为n(n为偶数)叶子结点父结点。
而在二叉树中零度结点个数总比二度结点个数多1,因而拥有4个二度结点二叉树叶子结点个数是4+1=5.
总结,设n为完全二叉树结点数,n0为叶子结点数,n1为度为1结点数,n2为度为2结点数,则n=n0+n1+n2,n0=n2+1。
若n为奇数,则n1=0;若n为偶数,则n1=1(注意一定要是完全二叉树)。
4.设一棵完全二叉树共有700个结点,则在该二叉树中有()个叶子结点。
[解析]完全二叉树特点:
如果结点总数是偶数则(度为1结点)N1=1;如果结点总数为奇数,则N1=0;二叉树始终n0=n2+1,n2=n0-1,结点总数=n0+n1+n2(将n2=n0-1,n1=1代入公式);则有700=n0+1+n0-1,因此n0=350
5.具备16个结点完全二叉树深度为()
[解析]5;二叉树特点:
具备n个结点完全二叉树深度为[log2n]+1,因此具备16个结点完全二叉树深度为[log216]+1=5
6.在长度为n有序线性表中进行二分查找,最坏状况下需要比较次数是
A.O(n)B.O(n2)C.O(log2n)D.O(nlog2n)
[解析]对于长度为n线性表进行顺序查找,平均要进行n/2次比较,在最坏状况下要进行n次比较;对于长度为n线性表进行二分查找,在最坏状况下要进行log2n次比较(但二分查找规定线性表是顺序存储有序表)。
因而本题答案为C
7.请写出用二分查找法在有序顺序表{1,2,3,4,6,8,9,11}中查找3比较序列()
[解析]4,2,3;可采用擦去法做此类二分法查找序列题:
每次从序列中找出中间元素,刚开始时是4,由于3比4小,只能存在在4之前序列中,于是把4后来序列擦去,只剩余序列{1,2,3},在重复以上过程直到查找元素或是序列为空。
1.通过相邻数据元素互换逐渐使线性表变成有序排序办法是()
A.冒泡排序法B.简朴选取排序法C.简朴插入排序法D.希尔排序法
[解析]冒泡排序法是一种最简朴互换类排序办法,它是通过相邻数据元素互换逐渐将线性表变成有序,每次只能消除一种逆序。
简朴插入排序法,是将无序序列中元素插入有序线性表中,并依次与前面元素进行比较,直到不不大于前面元素为止,最多需要比较n(n-1)/2次。
希尔排序法是简朴插入排序法优化,每进行依次可以消除各种逆序。
简朴选取排序法是指扫描整个线性表,从中选出最小元素,将它互换到表最前面,然后对剩余子表采用同样办法,直到子表空为止。
2.冒泡排序在最坏状况下比较次数是()
A.n(n+1)/2B.nlog2nC.n(n-1)/2D.n/2
[解析]对于长度为n线性表,在最坏状况下,冒泡排序需要进行比较次数是n(n-1)/2。
本题答案为C
2.迅速排序法属于()
A.选取类排序法B.互换类排序法C.插入类排序法D.归并类排序法
[解析]互换类排序法涉及冒泡和迅速排序法;插入类排序法涉及简朴插入和希尔排序法;选取类排序法涉及简朴选取和堆排序法。
本题为B
3.下列排序办法中,最坏状况下比较次数至少是()
A.冒泡排序B.简朴选取排序C.直接插入排序D.堆排序
[解析]冒泡排序、简朴选取排序和直接插入排序法在最坏状况下比较次数为n(n-1)/2。
而堆排序法在最坏状况下比较次数为O(nlog2n),本题为D
4.长度为10顺序表首地址是1023开始,顺序表中每个元素长度为2,在第4个元素前面插入一种元素和删除第7个元素后,顺序表总长度还是不变。
问顺序表中第5个元素在执行插入和删除操作后在顺序表中存储地址是()
A.1028B.1029C.1031D.1033
[解析]由于问是本来顺序表中第5个元素,它在插入操作后变成了第6个元素(由于插入元素在它前面)。
由于删除第7个元素在它背面,不会影响它在顺序表中排位。
因而在执行插入和删除操作后原先顺序表中第5个元素变成了新顺序表中第6个元素。
再按照线性表随机存取地址计算公式ADD(ai)=ADD(a1)+(i-1)×k计算ADD(a6)=ADD(a1)+(6-1)×2=1023+5×2=1033,因此选D
5._____是一组严谨地定义运算顺序规则,并且每一种规则都是有效,且是明确,此顺序将在有限次数下终结。
[解析]算法
6.在最坏状况下,冒泡排序时间复杂度为______,简朴插入排序时间复杂度为______,希尔排序时间复杂度为______,简朴选取排序时间复杂度为______,堆排序时间复杂度为______。
[解析]O(n(n-1)/2);O(n(n-1)/2);O(n1.5);O(n(n-1)/2);O(nlog2n);
7.如下排序技术中属于互换类排序法有______,属于插入类排序法有______,属于选取类排序法有_____。
A.简朴插入排序B.冒泡排序C.希尔排序D.堆排序E.迅速排序F.简朴选取排序
[解析]BE;AC;DF
7.算法中各操作之间执行顺序称为()。
描述算法工具普通有()、()、()
[解析]算法控制构造;老式流程图;N-S构造化流程图、算法描述语言
1.请写出冒泡排序法对序列{5,1,7,3,1,6,9,3,2,7,6}进行第一遍扫描后排序成果是_______.
[解析]{1,1,5,3,2,6,7,3,6,7,9}[分析]冒泡排序法基本过程:
一方面,从表头开始往后扫描线性表,在扫描过程中逐次比较相邻两个元素大小,若前面元素不不大于背面元素,则将她们互换,这样最大者互换到了表最背面;然后,从后往前扫描剩余线性表,同样,在扫描过程中逐次比较相邻两个元素大小若背面元素不大于前面元素,则将她们互换看,这样最小者互换到了表最前面;从前去后和从后往前扫描一种来回称为一遍;对剩余线性表重复上述过程,直到剩余线性表变为空为止,这样线性表就变为有序了。
当前咱们来看看对线性表{5,1,7,3,1,6,9,3,2,7,6}从前去后进行扫描过程:
5>1,5和1互换位置得到{1,5,7,3,1,6,9,3,2,7,6}
5<7不论,继续往后扫描,扫描到7
7>3,7和3互换位置得到{1,5,3,7,1,6,9,3,2,7,6}
7>1,7和1互换位置得到{1,5,3,1,7,6,9,3,2,7,6}
7>6,7