2014-2015学年第2学期算法与数据结构(AB)试题与标准答案

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

2014-2015学年第2学期考试试题(A)卷课程名称算法与数据结构任课教师签名

出题教师签名审题教师签名

考试方式(闭)卷适用专业信息与计算机

考试时间(120)分钟

一、单项选择题(每小题4分,共20分)

1、算法的时间复杂度与()有关。

(A) 问题规模(B) 计算机硬件性能

(C) 编译程序质量(D) 程序设计语言

2、线性表的链式存储结构与顺序存储结构相比的优点是()。

(A) 所有的操作算法实现简单(B) 便于随机存取

(C) 便于插入和删除操作的实现(D) 便于利用零散的存储器空间

3、设10个元素进栈序列是1,2,…,10,其输出序列是a1,a2,…,a10,如果a1=3,则a2的值为()。

(A) 一定是2 (B) 一定是1

(C) 不可能是4 (D) 不可能是1

4、设高度为h的二叉树上只有度为0和度为2的结点(假设仅含根结点的二叉树的高度为1),则此二叉树所包含的结点数至多有()。

(A) 2h-1 (B) 2h - 1

(C) 2h+1 (D) 2h + 1

5、设有13个值,用它们组成一棵哈夫曼树,则该哈夫曼树共有()个结点。

(A) 13 (B) 12

(C) 26 (D) 25

二、填空题(每小题2分,共10分)

1、把一个递归过程转换成一个等价的非递归过程,通常使用()。

2、数据的逻辑结构是从逻辑上描述数据,它与数据的()无关,是独立于计算机的。

3、在单链表中,结点与结点之间的逻辑关系不是通过存储单元的顺序来表示的,而是通过()来实现的。

4、实现动态分配和动态回收一个结点空间的两个标准过程是()和()。

三、名词解释(每小题5分,共10分)

1、线性表

2、哈希函数

四、简答题(每小题5分,共10分)

1、简述顺序表和链表的优缺点。

2、举例说明直接选择排序方法是一种不稳定的排序方法。

五、应用题(每小题6分,共30分)

1、关键字序列{12,7,18,13,17,29,34,6,8}是否为堆?若不是,请将其调整为最小堆,并统计建堆过程中的交换次数。

2、已知待排序的关键字序列为{72,71,74,80,68

,14,86,37,17},请列出快

速排序过程中,以第一个纪录为基准,第一趟排序后的最终结果。

3、设有关键字序列为{2,4,6,9,14,16,13}。基本区域长度为8(地址0…7),哈希函数H(key)=key%7,用线性探查法解决冲突。试给出关键字序列的存储状况,并给出查找成功的平均查找长度。

给出字符集中各字符的哈夫曼编码。

5、使用克鲁斯卡尔算法,画出下图(1)的最小生成树。

六、算法设计题(每小题10分,共20分)

1、已知二叉树采用二叉链存储结构存储,其根结点为root。设计函数AllPath,输出

二叉树中从每个叶子结点到根结点的路径。

例如,对于下图所示的二叉树,其输出结果为:

2、已知二叉树采用二叉链存储结构存储,其根结点为root,利用栈设计二叉树的前序遍历函数PreOrder。

2014-2015学年第2学期《算法与数据结构》试题(A) 参考解答及评分标准

一、单项选择题(每小题4分,共20分)

解4:二叉树仅有0度和2度结点,高为h的二叉树为满二叉树时,含结点数最多。当h=1时,结点至多为1=21 -1;当h=2时,结点至多为3=22-1;当h=3时,结点为7=23-1,归纳有,至多有2h-1个结点。选B。

解5:哈夫曼树的叶子结点n0=13,n1=0,n2=n0-1=12,故n=13+12=25。选D。

二、填空题(每空2分,共10分)

1、栈

2、存储结构或者物理结构

3、指向下一个结点的指针

4、new,delete

三、名词解释(每小题5分,共15分)

1、线性表:具有相同属性的元素的一个有限序列。

2、哈希函数:把关键字k映射成内存单元的地址H(k),并将关键字存储到这个内存单元中,函数H()称之为哈希函数。

四、简答题(每小题5分,共10分)

解1、顺序表的优点是可以随机访问数据元素:缺点是大小固定,不利于增减结点(增减操作需要移动元素)。链表的优点是采用指针方式增减结点,非常方便(只需要改变指针指向,不移动结点);缺点是不能进行随机访问。另外,每个结点上增指针域,造成额外存储空间增大。

解2、对{5,4,6,5,7,2}采用直接选择排序,注意5(前)与5(后)的位置变化,说明该排序法是不稳定的。

五、应用题(第小题6分,共30分)

解1、非堆,经过6-13,6-7,6-12,12-7,12-8的5次交换,调成最小堆。

解2、17,71,37,14,68,72,86,80,74

解3、H(2)=2%7=2,H(4)=4%7=4,H(6)=6%7=6

H(9)=9%7=2,冲突

H(9)=(2+1)%8=3,不再冲突

H(14)=14%7=0

H(16)=16%7=2,冲突

H(16)=(2+1)%8=3,再冲突

H(16)=(3+1)%8=4,再冲突

H(16)=(4+1)%8=5,不再冲突

H(13)=13%7=6,冲突

H(13)=(6+1)%8=7,不再冲突

查找成功平均次数(1+1+2+1+4+1+2)/8=12/8=1.5 解4、哈夫曼编码与哈夫曼树如下:

解5、

六、算法设计题(每小题10分,共20分) 解1、顺序队列q[]的结构如下:

D 叶子:D=>B=>A F 叶子:F=>E=>B=>A G 叶子:G=>E=>B=>A #include using namespace std;

#define MaxSize 100//顺序队列的最大容量 struct BinTreeNode //二叉树结点定义 { char data;//结点字符 struct BinTreeNode *left,*right;//左右子女指针 };

//用广义表A(B(D,E(F,G)),C)建立二叉树 BinTreeNode *s[MaxSize];//定义全局栈 int top=-1;//栈顶指针置-1,表示空栈 //空栈判定 int IsEmpty()

{ if(top==-1) return 1; else return 0; }

//满栈判定 int IsFull()

{ if(top>=MaxSize-1) return 1; else return 0; }

//入栈

void Push(BinTreeNode *x) { if(IsFull()) { cout<<"栈满,无法入栈"<

相关文档
最新文档