-数据结构与算法A卷参考答案
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
江西财经大学06-07第一学期
期末考试参考答案与评分标准
试卷代码:03266A 授课课时:112
课程名称:数据结构与算法适用对象:本科
一、单项选择题(每小题2分,共24分。)
1. D
2. D
3. C
4. B
5. C
6. C
7. D 8. B 9. D 10. A 11. C 12. D
二、填空题(每空1分,共7分。)
1.父(或前驱), 1
2. n-1
3. 不包含任何字符的串
4. (n+1)/2
5. 素数
6. 0111223123
三、简答题(每小题5分,共15分)
1.答:①顺序存储时,相邻数据元素的存放地址也相邻(逻辑与物理统一);要求内存中
可用存储单元的地址必须是连续的。
优点:存储密度大,存储空间利用率高。缺点:插入或删除元素时不方便。
②链式存储时,相邻数据元素可随意存放,但所占存储空间分两部分,一部分存放结
点值,另一部分存放表示结点间关系的指针
优点:插入或删除元素时很方便,使用灵活。缺点:存储密度小(<1),存储空间利用率低。
顺序表适宜于做查找这样的静态操作;链表宜于做插入、删除这样的动态操作。
若线性表的长度变化不大,且其主要操作是查找,则采用顺序表;
若线性表的长度变化较大,且其主要操作是插入、删除操作,则采用链表。
2.答:在排序序列中,任何两个相等的关键字Ki=Kj,如果在排序前的序列中Ki领先于
Kj,若在排序后的序列中Ki仍领先于Kj,则称所用的排序方法是稳定的;反之,若可能使排序后的序列中Kj领先于Ki,则称所用的排序方法是不稳定的。
3.答:各中缀表达式的后缀形式如下:
(1)AB+D*EFAD*+/+C+
(2)AB&&EF>!||
四、判断题(本大题共10小题,命题正确的在题后括号内写“T”,错误的在题后括号内写“F”,每小题1分,共10分)
1.T
2.F
3.T
4.F
5.F
6.F
7.T
8.F
9.T 10.F
五、分析应用题(1、4小题各6分,2、3小题各7分)
1.(6分)
答:程序段的功能是利用tmp栈将一个非空栈s1的所有元素按原样复制到一个栈s2当中去。
2.(7分)
答:为方便起见,设各种字符的权值w={5,29,7,8,14,23,3,11}。因为n=8,所以要构造的赫夫曼树共有m=2n-1=2*8-1=15个结点。生成的赫夫曼树为下图所示:
赫夫曼编码为:概率为0.23的字符编码为:00
概率为0.11的字符编码为:010
概率为0.05的字符编码为:0110
概率为0.03的字符编码为:0111
概率为0.29的字符编码为:10
概率为0.14的字符编码为:110
概率为0.07的字符编码为:1110
概率为0.08的字符编码为:1111
3.(7分)
答:使用散列函数H(key)=key mod 13 有:
H(12)=12, H(23)=10,H(45)=6,H(57)=5,H(20)=7,H(03)=3,H(78)=0,H(31)=5,H(15)=2,H(36)=10
搜索成功的平均搜索长度为:
ASL=1/10(1+1+1+1+1+1+4+1+2+1)=14/10
4.(6分)
答:希尔排序(增量为5,2,1)
六、算法设计题(第1小题10分,第2小题8分)
1. (10分)
include
include”string.h”
int charnumber=128;
void frequency(string&s,int C[ ]){
for(int i=0;i< charnumber;i++) C[i]=0;
for( i=0;i< s.length();i++) C[atoi(s[i])]++;
for( i=0;i< charnumber;i++)
if(C[i]>0) cout<<”(”<
}
2. (8分)
类型定义(略)
int Level(BiTree bt) //层次遍历二叉树,并统计度为1的结点的个数
{
int num=0; //num统计度为1的结点的个数
if(bt){
QueueInit(Q); QueueIn(Q,bt);//Q是以二叉树结点指针为元素的队列 while(!QueueEmpty(Q))
{ p=QueueOut(Q); printf(p->data); //出队,访问结点
if(p->lchild && !p->rchild ||!p->lchild && p->rchild)
num++;//度为1的结点
if(p->lchild) QueueIn(Q,p->lchild); //非空左子女入队
if(p->rchild) QueueIn(Q,p->rchild); //非空右子女入队
}
}
return(num); //返回度为1的结点的个数
}
古希腊哲学大师亚里士多德说:人有两种,一种即“吃饭是为了活着”,一种是“活着是为了吃饭”.一个人之所以伟大,首先是因为他有超于常人的心。“志当存高远”,“风物长宜放眼量”,这些古语皆鼓舞人们要树立雄心壮志,要有远大的理想。
有一位心理学家到一个建筑工地,分别问三个正在砌砖的工人:“你在干什么?”
第一个工人懒洋洋地说:“我在砌砖。” 第二个工人缺乏热情地说:“我在砌一堵墙。” 第三个工人满怀憧憬地说:“我在建一座高楼!”
听完回答,心理学家判定:第一个人心中只有砖,他一辈子能把砖砌好就不错了;第二个人眼中只有墙,好好干或许能当一位技术员;而第三个人心中已经立起了一座殿堂,因为他心态乐观,胸怀远大的志向!
井底之蛙,只能看到巴掌大的天空;摸到大象腿的盲人,只能认为大象长得像柱子;登上五岳的人,才能感觉“一览众山小”;看到大海的人,就会顿感心胸开阔舒畅;
心中没有希望的人,是世界上最贫穷的人;心中没有梦想的人,是普天下最平庸的人;目光短浅的人,是最没有希望的人。
清代“红顶商人”胡雪岩说:“做生意顶要紧的是眼光,看得到一省,就能做一省的生意;看得到天下,就能做天下的生意;看得到外国,就能做外国的生意。”可见,一个人的心胸和眼光,决定了他志向的短浅或高远;一个人的希望和梦想,决定了他的人生暗淡或辉煌。