-数据结构与算法A卷参考答案

合集下载
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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的结点的个数

}

古希腊哲学大师亚里士多德说:人有两种,一种即“吃饭是为了活着”,一种是“活着是为了吃饭”.一个人之所以伟大,首先是因为他有超于常人的心。“志当存高远”,“风物长宜放眼量”,这些古语皆鼓舞人们要树立雄心壮志,要有远大的理想。

有一位心理学家到一个建筑工地,分别问三个正在砌砖的工人:“你在干什么?”

第一个工人懒洋洋地说:“我在砌砖。” 第二个工人缺乏热情地说:“我在砌一堵墙。” 第三个工人满怀憧憬地说:“我在建一座高楼!”

听完回答,心理学家判定:第一个人心中只有砖,他一辈子能把砖砌好就不错了;第二个人眼中只有墙,好好干或许能当一位技术员;而第三个人心中已经立起了一座殿堂,因为他心态乐观,胸怀远大的志向!

井底之蛙,只能看到巴掌大的天空;摸到大象腿的盲人,只能认为大象长得像柱子;登上五岳的人,才能感觉“一览众山小”;看到大海的人,就会顿感心胸开阔舒畅;

心中没有希望的人,是世界上最贫穷的人;心中没有梦想的人,是普天下最平庸的人;目光短浅的人,是最没有希望的人。

清代“红顶商人”胡雪岩说:“做生意顶要紧的是眼光,看得到一省,就能做一省的生意;看得到天下,就能做天下的生意;看得到外国,就能做外国的生意。”可见,一个人的心胸和眼光,决定了他志向的短浅或高远;一个人的希望和梦想,决定了他的人生暗淡或辉煌。

相关文档
最新文档