计算机软件基础习题及参考答案.pdf
《计算机软件基础习题及参考答案.pdf》由会员分享,可在线阅读,更多相关《计算机软件基础习题及参考答案.pdf(61页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、习题一L什么是数据结构,数据的逻辑结构,数据的存储结构?数据结构对算法有什么影响?请举例说明。2.数据结构的存储方式主要有哪两种?它们之间的本质区别是什么?3.设为正整数,分析下列各程序段中加下划线的语句的执行次数。(1)for(int i =1;i =n;i-H)for(int j =1;j 9 l j-H)c i D I=0.。for(int k=1;k =n;leH)cif=ci 口 +ai R *;x =a y =afor(int i =1;i =n;i-H)for(int j =1;j =i;j-H)for(int k 1;k =j;k-H)x =x +y;int i =1,j =1
2、;whi le&:j i)i =i +1;j =j +i;*int i =1;do for(int j =1;j j-H)i =i +j;while(i 1 00+rj);4试编写一个函数计算n!*2,的值,结果存放于数组A,rray Siz e的 第n个数组元素中,OW n array Siz e或者对于某一个k(p k max lnt时,应按出错处理。可有如下三种不同的出错处理方式:(1)用printf显示错误信息及ex it(1)语句来终止执行并报告错误;(2)用返回整数函数值Q 1来实现算法,以区别是正常返回还是错误返回;(3)在函数的参数表设置一个引用型的整型变量来区别是正常返回还是
3、某种错误返回。试讨论这三种方法各自的优缺点,并以你认为是最好的方式实现它。5.设 有 一 个 线 性 表(劭 加2,a i)存放在一个一维数组A ar ray Siz e中的前n个数组元素位置。请编写一个函数将这个线性表原地逆置,即将数组的前n个 原 址 内 容 置 换 为a r,,a 幻。最后分析此算法的时间复杂度及空间复杂度。6.顺序表的插入和删除要求仍然保持各个元素原来的次序。设在等概率情形下,对 有1 2 7个元素的顺序表进行插入,平均需要移动多少个元素?删除一个元素,又平均需要移动多少个元素?7.利用顺序表的操作,实现以下的函数。并分析你所编制的函数的时间复杂度,并 分 析 与6)的
4、时间复杂度出现差异的原因。(1)从顺序表中删除具有给定值x的所有元素。(2)从顺序表中删除其值在给定值s与t之间(要求s小 于t)的所有元素。(3)从有序顺序表中删除其值在给定值s与t之 间(要 求s小 于t)的所有元素。将两个有序顺序表l a,1 b合并成一个新的有序顺序表1 G(5)从顺序表中删除所有其值重复的元素,使表中所有元素的值均不相同。&线性表可用顺序表或链表存储。试问:(1)两种存储表示各有哪些主要优缺点?如果有n个表同时并存,并且在处理过程中各表的长度会动态发生变化,表的总数也可能自动改变、在此情况下,应选用哪种存储表示?为什么?(3)若表的总数基本稳定,且很少进行插入和删除,
5、但要求以最快的速度存取表中的元素,这时,应采用哪种存储表示?为什么?9.试写出计算线性链表长度的算法。10.设有一个表头指针为h的单链表。试设计一个算法,通过遍历一趟链表,将链表中所有结点的链接方向逆转,如下图所示。要求逆转结果链表的表头指针h指向原链表的最后一个结点。pr=Q P pr h PjnW rkrnprm 1kl dsIL设有一线性链表,其结点值均为整数。试将该线性链表分解为两个线性链表,其中一链表中的结点值均为负整数,而另一链表中结点的值均为正整数,并删除结点值为零的结点。1 2设h a和h b分别是两个带表头结点的非递减有序单链表的表头指针,试设计一个算法,将这两个有序链表合并
6、成一个非递减有序的单链表。要求结果链表仍使用原来两个链表的存储空间,不另外占用其它的存储空间。表中允许有重复的数据。13.设h a和h b分别是两个带表头结点的非递减有序单链表的表头指针,试设计一个算法,将这两个有序链表合并成一个非递增有序的单链表。要求结果链表仍使用原来两个链表的存储空间,不另外占用其它的存储空间。表中允许有重复的数据。14在一个循环链表中寻找值为x的结点,并将该结点移到第一个结点之前。15.对于下面的每一步,画出栈元素和栈顶指针的示意图:(1)栈初始化;(2)元 素 x入栈;(3)元 素 y入栈;(出栈(5)栈初始化(。元 素 z入栈16.铁路进行列车调度时,常把站台设计成
7、栈式结构的五陵,皿站台,如右图所示。试问:(1)设有编号为L 2,3,4,5,6的六辆列车,顺序开 P入栈式结构的站台,则可能的出栈序列有多少种?若进站的六辆列车顺序如上所述,那么是否能够得到435612,325641,154623和 135426的出站序列,如果不能,说明为什么不能;如果能,说明如何得到即写出得栈域得栈的序列)。17.试证明:若借助栈可由输入序列1,2,3,,n得到一个输出序列p,R,R,,R 它是输入序列的某一种排列),则在输出序列中不可能出现以下情况,即存在i j k,使 得 p p;二写出转换过程中栈的变化。诔示乘方运算)22.设循环队列的容量为7 0(序 号 从1到7
8、Q),经过一系列入队和退队运算后,有:(1)front=15,reap=46(2)front=45,reai=10问在上述两种情况下,循环队列中各有多少个元素?23.设用链表表示一个双端队列,要求可在表的两端插入,但限制只能在表的一端删除。试编写基于此结构的队列的插入Qnqueu和删除(dequeue)算法,并给出队列空和队列满的条件。习 题21.列出右图所示二叉树的叶结点、分支结点和每个结点的层次。2.使 用(1)顺 序 表 示 和Q)二叉链表表示法,分别画出上图所示二叉树的存储表示。3.在 结 点 个 数 为 n 3 D 的各棵树中,高度最小的树的高度是多少?它有多少个叶结点?多少个分支结
9、点?高度最大的树的高度是多少?它有多少个叶结点?多少个分支结点?4.试分别画出具有3个结点的树和3个结点的二叉树的所有不同形态。5.如果一棵 树 有 n 个 度 为 1的结点,有 力 个 度 为 2 的结点,瓜 个 度 为 m的结点,试问有多少个度为0的结点?试推导之。6.若用二叉链表作为二叉树的存储表示,试针对以下问题编写递归算法:(1)统计二叉树中叶结点的个数。(2)以二叉树为参数,交换每个结点的左子女和右子女。求二叉树的深度。7.一棵高度为h 的 满 k叉树有如下性质:第 h 层上的结点都是叶结点,其余各层上每个结点都有k 棵非空子树,如果按层次自顶向下,同一层自左向右,顺序 从 1开始
10、对全部结点进行编号,试问:(1)各层的结点个数是多少?编 号 为 i的结点的父结点若存在)的编号是多少?(3)编 号 为 i 的结点的第m个孩子结点若存在)的编号是多少?编 号 为 i 的结点有右兄弟的条件是什么?其右兄弟结点的编号是多少?(5)若 结 点 个 数 为 n,则 高 度 h 是 n 的什么函数关系?&请画出下图所示的树所对应的二叉树、9.已 知 一 棵 二 叉 树 的 前 序 遍 历 的 结 果 是 ABBOEKHIJ,中序遍历的结果是EBONFHiqj,试画出这棵二叉树。10.给定权值集合 15,03,14,02,06,09,16,171,构造相应的霍夫曼树,并计算它的带权路径
11、长度。习题三1.设有序顺序表中的元素依次为017,094,154,170,275,503,509,512,553,612,677,765,897,9 0&试画出对其进行折半查找时的二叉查找树,并计算查找成功的平均查找长度和查找不成功的平均查找长度。2.若对有n个元素的有序顺序表和无序顺序表进行顺序查找,试就下列三种情况分别讨论两者在等查找概率时的平均查找长度是否相同?(1)查找失败;查找成功,且表中只有一个关键码等于给定值k的对象;(3)查找成功,且表中有若干个关键码等于给定值k的对象,要求一次查找找出所有对象。3.设 有1 0 0 0 0个记录对象,通过分块划分为若干子表并建立索引,那么为了
12、提高查找效率,每一个子表的大小应设计为多大?4.设散列表为H T 口 引,散列函数为H=丘工用闭散列法解决冲突,对下列关键码序列12,23,45,57,20,03,7&31,15,3 6造表。(1)采用线性探测法寻找下一个空位,画出相应的散列表,并计算等概率下查找成功的平均查找长度和查找不成功的平均查找长度。Q)采用随机探测法寻找下一个空位,随机数序列为:5,4,2,7,3,6,。画出相应的散列表,并计算等概率下查找成功的平均查找长度。5.设 有1 5 0个记录要存储到散列表中,要求利用线性探查法解决冲突,同时要求找到所需记录的平均比较次数不超过2次。试问散列表需要设计多大?设a是散列表的装载
13、因子,则有ASLsucc=l(l+-l-)2-a6.设 有15000个记录需放在散列文件中,文件中每个桶内各页块采用链接方式连结,每个页块可存放30个记录。若采用按桶散列,且要求查找到一个已有记录的平均读盘时间不超过1.5次,则该文件应设置多少个桶?已知,链地址法的 平 均 查 找 长 度/I7.设待排序的排序码序列为 12,2,16,3Q 28,10,16*20,0 1&,试分别写出使用以下排序方法每趟排序后的结果。并说明做了多少次排序码比较。(1)直接插入排序 希尔排序增量为5,2,1)(3)冒泡排序快速排序(3直接选择排序 堆排序二路归并排序&在起泡排序过程中,什么情况下排序码会朝向与排
14、序相反的方向移动,试举例说明。在快速排序过程中有这种现象吗?9.试设计一个算法,使 得 在O 的时间内重排数组,将所有取负值的排序码排在所有取正值祚负值)的排序码之前。提示:对比快速排序的第一趟排序,此处,以0为控制关键字。10.手工跟踪对以下各序列进行堆排序的过程。给出形成初始堆及每选出一个排序码后堆的变化。(1)按字母顺序排序:Tin)Dot,Eva,Rai)Kin)Guy,Ann,J in;Kay,Ron,JanQ)按数值递增顺序排序:26,33,35,29,19,12,22(3)同 样7个数字,换一个初始排列,再按数值的递增顺序排序:12,19,33,26,29,35,2211.希尔排
15、序、简单选择排序、快速排序和堆排序是不稳定的排序方法,试举例说明。1 2.在已排好序的序列中,一个对象所处的位置取决于具有更小排序码的对象的个数。基于这个思想,可得计数排序方法。该方法在声明对象时为每个对象增加一个计数域co u n t,用于存放在已排好序的序列中该对象前面的对象数目,最后依count域的值,将序列重新排列,就可完成排序。试编写一个算法,实现计数排序。并说明对于一个有n个对象的序列,为确定所有对象的count值,最多需要 做n g 1)二次排序码比较。习题解答3.设为正整数,分析下列各程序段中加下划线的语句的执行次数。(1)for(int i 1;i Q n;i-H)for(i
16、nt j=1;j=n;j-H)c ffl 0=0.0;for(int k 1;k =耳 kH)ci 皿=ci +ai k*bk 叱 x =a y =af o r (i n t i =1;i =n;i-H)f o r (i n t j =1;j Q i;j-H)f o r (i n t k 1;k =j;k-H)x =x +y;i n t i =1,j =1;w h i l e (i =i j =j)i =i +1;j =j +i;*i n t i =1;d o f o r (i n t j =1;j j-H)i =i +j;汕i l e (i 1 0 0 +r j);【解 答】(1)n n n
17、i=l j=l k=li=l j=l k=l i=l j=l i=l 乙)乙 i=l 乙 i=l1 n(n+l)(2n+1)1 n(n+1)n(n+l)(n+2)=-1-=-2 6 2 2 6(3)i =1时,i=2,j=j+i =l +2 =2+,i =2 时,i =3,j =j +i =(2 +1 )+3 =3 +1 +2,i =3时,i=4,j =j +i =(3 +1 +2 )+4=4 +1 +2 +3,i =4时,i =5,j =j +i =(4 +1 +2 +3 )+5 =5 +1 +2 +3 +v j=(k+l)+i 100+n2的最小整数k,语 句 i=i+j 的程序步数为n*
18、k4 试编写一个函数计算n!*2的值,结果存放于数组A 区 rraySize的 第 n个数组元素中,04 nW arraySiza若设计算机中允许的整数的最大值为maxlnt,则当 n arraySize或者对于某一个k(J)k maxlnt时,应按出错处理。可有如下三种不同的出错处理方式:(1)用 printf显示错误信息及exit(1)语句来终止执行并报告错误;(2)用返回整数函数值0,1来实现算法,以区别是正常返回还是错误返回;(3)在函数的参数表设置一个引用型的整型变量来区别是正常返回还是某种错误返回。试讨论这三种方法各自的优缺点,并以你认为是最好的方式实现它。【解答】#include
19、 const int arraySize=10Qconst int IVhxInt 0 x7fffffff;int calc(int T 口,int n)int i,value=1;if(n!=0)int edge=VhxInt/n/2;for(i 1;i(耳 i-H-)value*=i*2;i f(value edge)return Qv al u e*n *2;Tn =v al u ep r in t f C A:%=,n,Tn);r et u r n 1;v o id m ain ()in t Aar r ay Siz e;in t i;fo r (i =。i length;for(in
20、t i=。i data i;Adata i=Ardata n i-1;Ardata|n i 1=tn时间复杂度:需进行P,次循环,因此时间复杂度为O G;空间复杂度:使用一个整形辅助存储单元W因此空间复杂度为。6.顺序表的插入和删除要求仍然保持各个元素原来的次序。设在等概率情形下,对 有127个元素的顺序表进行插入,平均需要移动多少个元素?删除一个元素,又平均需要移动多少个元素?【解答】若设顺序表中已有n个元素。又设插入或删除表中各个元素的概率相等,则在插入时因有 叶1个插入位置 可以在表中最后一个表项后面追加),每个元素位置插入的概率为U 3 4),但在删除时只能在已有n个表项范围内删除,所
21、以每个元素位置删除的概率为人插入时平均移动元素个数AvN(Averagy Moving Number)为AANMANT =-1 -。(n i)=-1-(/n +(/n -1八)+1 +0()=-1-n-(-n-+-1-)=n=6n+l )n +1 n +1 2 2删除时平均移动元素个数的 为AMN=一(n i 1)(n-l)+(n-2)+1 +0)=-63n M n n 2 27.利用顺序表的操作,实现以下的函数。并分析你所编制的函数的时间复杂度,并 分 析 与(3)的时间复杂度出现差异的原因。(1)从顺序表中删除具有给定值X的所有元素。从顺序表中删除其值在给定值S与 t之间(要求S小 于 t
22、)的所有元素。(3)从有序顺序表中删除其值在给定值s与 t之 间(要 求 s小 于 t)的所有元素。将两个有序顺序表la,1b合并成一个新的有序顺 序 表 Ie,(5)从顺序表中删除所有其值重复的元素,使表中所有元素的值均不相同。【解答】(1)从顺序表中删除具有给定值x的所有元素。void DelValue(listtype int x)int i=0,j;wh ile(i V length)/循 环,寻找具有值x的元素并删除它Vif(Hxiata i=x)/删除具有值x的元素,后续元素前移for(j=i;j length 1;j-H-)LHdata|j=L-data j+1;L-length
23、;长减 1Velse)Q)实现删除其值在给定值s与 t之 间(要 求 s小 于 t)的所有元素的函数如下:void DelValue s to t(1 i st type*L int s,int t)int i,j;i f(LHlength =0|s=t)printf C List is enpty or parameters are i 1 legal!5);exit(1);i=a毗 ile(i dataiXs 幽 lHdata i=t)T J 除满足条件的元素,后续元素前移for(j=i;j length 1;j-H-)L4data j=LHdata j+1;le n g th-i 长减e
24、lse i-H;)6)实现从有序顺序表中删除其值在给定值s与 t之间的所有元素的函数如下:void DelValue s to t 1 (1 i st type int s int t)int i,j,k;i f(LHlength =0|s=t)printf C List is errpty or parameters are i 1 legal!p);exit(1);for(i=Q i lengt4 i-H-)/为 循环,寻 找 值 s 的第一个元素”i f(LHdata i X s)break;/退出循环时,i指向该元素i f(i length )for(j=l;i+j t 的第一个元素沙
25、if(Hdata Q+j t)break;/3 退出循环时,i+j指向该元素*/for&=i+j;k v length;k+)/删除满足条件的元素,后续元素前移9L-5data k j=L-data R;Llength-=j;长减”)实现将两个有序顺序表合并成一个新的有序顺序表的函数如下:1 i st type*Nferge(listtype*IA 1 i st type*LB)/哈并有序顺序表LA与 LB成为一个新的有序顺序表并由函数返回1 isttype*L Qint va luel,va luedint i,j,k;ini t ia tel ist(L O;i f C A length+
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机软件 基础 习题 参考答案
限制150内