数据结构试卷及答案(1)

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

三、综合题(共50分)

1. 对于给定的5个实数W={9,5,13,3,6},试构造Huffman树;并求出该树的最小带权路径长度和各结点的Huffman编码。要求写出Huffman树的构造过程。(10分)

2. 对给定的一组关键字:65,97,76,13,27,49,55,4

写出希尔排序(增量为5,3,1)前2趟排序结果。(6分)

3. 已知一棵二叉树的前序遍历序列和中序遍历序列分别为ABEFIJDGH和EBIFJAGDH。要求:(1)画出这棵二叉树;要求写出分析写出过程;(2)写出这棵二叉树的后序遍历序列。(8分)

4. 已知一组关键字(19,14,23,1,68,20,84),哈希函数为:H(key)=key MOD 13, 哈希表长为m=16,设每个记录的查找概率相等,用线性探测再散列处理冲突,计算每个关键字的哈希地址,构造出哈希表,并计算平均查找长度。(10分)

5. 使用普里姆算法构造下图的最小生成树。要求写出

过程。

(10分)

6. 分析下面程序段的时间复杂度,(要求给出分析计算过程)(6分) m=0;

for (i=1;i<=n; i++) for (j=1; j<=n; j++) m++;

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

1. 用类C语言编写在带头结点的单链表L中删除第i个元素。

2. 二叉树采用二叉链表存储结构,用类C语言编写统计一棵二叉树t 中元素值等于e的结点个数的算法。

石家庄经济学院

/2 学年第学期

数据结构卷参考答案及评分标准一、选择题(每题2分,共20分)

1~5: C B C A C 6~10: D A C B C

评分标准:每题选对2分,错选,漏选均不得分。

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

1. 顺序存储结构

2. O(1)

3. 5

4. 值域

5. 5

6.n-1

7. 树形结构

8. (c,d)

9.最大值

10. n-1

评分标准:每题填对1分,错填,漏填均不得分。

三、综合题(共50分)

1. Huffman树如下图:

分)

WPL=(3+5)*3+(6+9+13)*2=80 (2分) 按左0右1,进行编码。 结点6的编码 00 结点3的编码 010 结点5的编码 011 结点9的编码 10

结点13的编码 11 (4分)

2. 希尔排序(增量为5,3,1)的前2趟排序结果: 第1趟结果:49 55 4 13 27 65 97 76 (3分) 第2趟结果:13 27 4 49 55 65 97 76 (3分)

3. (1

(6分)

(2)该二叉树后序序列:

EIJFBGHDA (2分) 4.

(7分)

哈希表如下:

(1分)ASL=(5*1+2+3)/7=1.43 (2分)

5.

评分标准:(b)到(d),每步2分。

6. 首先分析出程序段的基本操作是m++ ,然后计算出基本操作的重复执行次数为:n+n+n+……+n= n2. (4分)

所以,时间复杂度为:O(n2) (2分)

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

1. 用类C语言编写在带头结点的单链表L中删除第i个元素。

Status ListDelete_L(LinkList &L,int i,ElemType e){

//在带头结点的单链表L中删除第i个元素,并由e返回其值

p=L;j=0;//初始化,p指向第一个结点,j为计数器

while(p->next&&j

p=p->next,j++;} (5分)

if(!(p->next)||j>i-1)return ERROR;//删除位置不合理

q=p->next; p->next=q->next;

e=q->data; free(q) //删除并释放结点

return OK; (5分)

}// ListDelete_L

2. 二叉树采用二叉链表存储结构,用类C语言编写统计一棵二叉树t 中元素值等于e的结点个数的算法。

typedef struct btnode * bitreptr;

struct btnode

{ datatype data;

bitreptr lchild, rchild;

}

void countleaf(bitreptr t, int &count)

{ if(t!=null)

{ if(t→ data= =e)

count++; //count的初值设为0 (4分)

countleaf(t→lchild, count); (3分)

countleaf(t→rchild, count); (3分)

}

}

相关文档
最新文档