计算机软件基础习题及标准答案Word下载.docx
《计算机软件基础习题及标准答案Word下载.docx》由会员分享,可在线阅读,更多相关《计算机软件基础习题及标准答案Word下载.docx(56页珍藏版)》请在冰豆网上搜索。
for(intk=1;
k<
k++)
c[i][j]=c[i][j]+a[i][k]*b[k][j];
}
(2)x=0;
y=0;
for(inti=1;
for(intj=1;
=i;
j++)for(intk=1;
=j;
k++)X=X+y;
⑶inti=1,j=1;
while(i<
=n&
&
j<
=n){
i=i+1;
j=j+i;
⑷*inti=1;
do{
j++)i=i+j;
}while(i<
100+n);
4.试编写一个函数计算n!
*2n的值,结果存放于数组A[arraySize]的第n个数组元素中,0
narraySize。
若设计算机中允许的整数的最大值为maxInt,则当n>
arraySize或者对于
某一个k(0kn),使得k!
*2k>
maxInt时,应按出错处理。
可有如下三种不同的出
错处理方式:
(1)用printf显示错误信息及exit
(1)语句来终止执行并报告错误;
(2)用返回整数函数值0,1来实现算法,以区别是正常返回还是错误返回;
(3)在函数的参数表设置一个引用型的整型变量来区别是正常返回还是某种错误返回。
试讨论这三种方法各自的优缺点,并以你认为是最好的方式实现它。
5.设有一个线性表(a0,a1,…,an-2,an-i)存放在一个一维数组A[arraySize]中的前n个
数组元素位置。
请编写一个函数将这个线性表原地逆置,即将数组的前n个原址内容置换为
(an-1,an-2,…,a1,a0)。
最后分析此算法的时间复杂度及空间复杂度。
6.顺序表的插入和删除要求仍然保持各个元素原来的次序。
设在等概率情形下,对有127
个元素的顺序表进行插入,平均需要移动多少个元素?
删除一个元素,又平均需要移动多
从顺序表中删除具有给定值x的所有元素。
从顺序表中删除其值在给定值s与t之间(要求s小于t)的所有元素。
从有序顺序表中删除其值在给定值s与t之间(要求s小于t)的所有元素。
将两个有序顺序表la,lb合并成一个新的有序顺序表Ic。
从顺序表中删除所有其值重复的元素,使表中所有元素的值均不相同。
8.线性表可用顺序表或链表存储。
试问:
(1)两种存储表示各有哪些主要优缺点?
(2)
表的总数
如果有n个表同时并存,并且在处理过程中各表的长度会动态发生变化,也可能自动改变、在此情况下,应选用哪种存储表示?
为什么?
(3)若表的总数基本稳定,且很少进行插入和删除,但要求以最快的速度存取表中的元
素,这时,应采用哪种存储表示?
9.试写出计算线性链表长度的算法。
10.设有一个表头指针为h的单链表。
试设计一个算法,通过遍历一趟链表,将链表中所有结点的链接方向逆转,如下图所示。
要求逆转结果链表的表头指针h指向原链表的最后一个
结点。
11.设有一线性链表,其结点值均为整数。
试将该线性链表分解为两个线性链表,其中一链表中的结点值均为负整数,而另一链表中结点的值均为正整数,并删除结点值为零的结点。
12.设ha和hb分别是两个带表头结点的非递减有序单链表的表头指针,试设计一个算法,
将这两个有序链表合并成一个非递减有序的单链表。
要求结果链表仍使用原来两个链表的存
储空间,不另外占用其它的存储空间。
表中允许有重复的数据。
13.设ha和hb分别是两个带表头结点的非递减有序单链表的表头指针,试设计一个算法,
将这两个有序链表合并成一个非递增有序的单链表。
14.在一个循环链表中寻找值为x的结点,并将该结点移到第一个结点之前。
15.
栈初始化;
元素x入栈;
元素y入栈;
出栈
对于下面的每一步,画出栈元素和栈顶指针的示意图:
(1)
(3)
(4)
(5)栈初始化
(6)元素z入栈
16.
铁路进行列车调度时,常把站台设计成栈式结构的站台,如右图所示。
(1)设有编号为1,2,3,4,5,6的六辆列车,顺序开入栈式
结构的站台,则可能的出栈序列有多少种?
(2)若进站的六辆列车顺序如上所述,那么是否能够得到
435612,325641,154623和135426的出站序列,如果不能,说明为什么不能;
如果能,说明如何得到(即写出”进栈”或"
出栈”的序列)。
17.试证明:
若借助栈可由输入序列1,2,3,…,n得到一个输出序列pi,P2,P3,…,pn(它是输入序列的某一种排列),则在输出序列中不可能出现以下情况,即存在i<
k,使得Pj<
Pk<
pi。
(提示:
用反证法)
18.将编号为0和1的两个栈存放于一个数组空间V[m]中,栈底分别处于数组的两端。
当第
0号栈的栈顶指针top[0]等于-1时该栈为空,当第1号栈的栈顶指针top[1]等于m时该栈为空。
两个栈均从两端向中间增长。
当向第0号栈插入一个新元素时,使top[0]增1得到
新的栈顶位置,当向第1号栈插入一个新元素时,使top[1]减1得到新的栈顶位置。
当
top[0]+1==top[1]时或top[0]==top[1]-1时,栈空间满,此时不能再向任一栈加入新
的元素。
试定义这种双栈(DoubleStack)结构的类定义,并实现判栈空、判栈满、插入、删除算法。
19.改写顺序栈的进栈成员函数Push(x),要求当栈满时执行一个stackFulK)操作进行栈
满处理。
其功能是:
动态创建一个比原来的栈数组大二倍的新数组,代替原来的栈数组,原来栈数组中的元素占据新数组的前MaxSize位置。
20.根据教案中给出的优先级,回答以下问题:
(1)在表达式求值的过程中,如果表达式e含有n个运算符和分界符,问操作数栈(NS)
中最多可存入多少个元素?
且括号嵌套的最大深度为6层,问栈中最多可存入
21.表达式的中缀表示为a*x-b/x^2出转换过程中栈的变化。
(A表示乘方运算
如果表达式e含有n个运算符,多少个元素?
,试利用栈将它改为后缀表示ax*bx2A/-。
写
)
22.设循环队列的容量为70(序号从1到70),经过一系列入队和退队运算后,有:
(1)front=15,rear=46;
(2)front=45,rear=10
问在上述两种情况下,循环队列中各有多少个元素?
23.设用链表表示一个双端队列,要求可在表的两端插入,但限制只能在表的一端删除。
试编写基于此结构的队列的插入(enqueue)和删除(dequeue)算法,并给出队列空和队列满的条
件。
习题2
1•列出右图所示二叉树的叶结点、分支结点和每个结点的层次。
2.使用
(1)顺序表示和
(2)二叉链表表示法,分别画出上图所示二叉树的存储表示。
3.在结点个数为n(n>
1)的各棵树中,高度最小的树的高度是多少?
它有多少个叶结点?
多少个分支结点?
高度最大的树的高度是多少?
多少个分支结点?
4.试分别画出具有3个结点的树和3个结点的二叉树的所有不同形态。
5.如果一棵树有ni个度为1的结点,有n2个度为2的结点,…,nm个度为m的结点,试问有多少个度为0的结点?
试推导之。
6•若用二叉链表作为二叉树的存储表示,试针对以下问题编写递归算法:
(1)统计二叉树中叶结点的个数。
(2)以二叉树为参数,交换每个结点的左子女和右子女。
(3)求二叉树的深度。
7.
一棵高度为h的满k叉树有如下性质:
第h层上的结点都是叶结点,其余各层上每个结点都有k棵非空子树,如果按层次自顶向下,同一层自左向右,顺序从1开始对全部结点进行编号,
(5)
9.已知一棵二叉树的前序遍历的结果是ABECDFGHIJ,中序遍历的结果是EBCDAFHIGJ,试画出这棵二叉树。
10.
},构造相应的霍夫曼树,并计算它的
给定权值集合{15,03,14,02,06,09,16,17带权路径长度。
习题三
1.设有序顺序表中的元素依次为017,094,154,170,275,503,509,512,553,612,677,
765,897,908。
试画出对其进行折半查找时的二叉查找树,并计算查找成功的平均查找长
度和查找不成功的平均查找长度。
2.若对有n个元素的有序顺序表和无序顺序表进行顺序查找,试就下列三种情况分别讨论
两者在等查找概率时的平均查找长度是否相同?
查找失败;
查找成功,且表中只有一个关键码等于给定值
查找成功,且表中有若干个关键码等于给定值
3.设有
每一个子表的大小应设计为多大
10000个记录对象,通过分块划分为若干子表并建立索引,那么为了提高查找效率
4.设散列表为HT[13],散列函数为H(key)=key%13。
用闭散列法解决冲突,对下列关键码序列12,23,45,57,20,03,78,31,15,36造表。
(1)采用线性探测法寻找下一个空位,画出相应的散列表,并计算等概率下查找成功的平均查找长度和查找不成功的平均查找长度。
(2)采用随机探测法寻找下一个空位,随机数序列为:
5,4,2,7,3,6,…。
画出相
应的散列表,并计算等概率下查找成功的平均查找长度。
5.设有150个记录要存储到散列表中,要求利用线性探查法解决冲突,同时要求找到所需记录的平均比较次数不超过2次。
试问散列表需要设计多大?
设是散列表的装载因子,
则有
11
ASLsucc2(11)
8.在起泡排序过程中,什么情况下排序码会朝向与排序相反的方向移动,试举例说明。
在快速排序过程中有这种现象吗?
9.试设计一个算法,使得在0(n)的时间内重排数组,将所有取负值的排序码排在所有取
11.
希尔排序、简单选择排序、快速排序和堆排序是不稳定的排序方法
12.
基于
count,用最后依count域的值,将序列重新排列,
并说明对于一个有n个对象的序列,为确次排序码比较。
在已排好序的序列中,一个对象所处的位置取决于具有更小排序码的对象的个数。
这个思想,可得计数排序方法。
该方法在声明对象时为每个对象增加一个计数域于存放在已排好序的序列中该对象前面的对象数目,就可完成排序。
试编写一个算法,实现计数排序。
定所有对象的count值,最多需要做n(n-1)/2
习题解答
for(intj