2017年数据结构第三次作业

上传人:绿** 文档编号:45946796 上传时间:2018-06-20 格式:DOC 页数:12 大小:35.50KB
返回 下载 相关 举报
2017年数据结构第三次作业_第1页
第1页 / 共12页
2017年数据结构第三次作业_第2页
第2页 / 共12页
2017年数据结构第三次作业_第3页
第3页 / 共12页
2017年数据结构第三次作业_第4页
第4页 / 共12页
2017年数据结构第三次作业_第5页
第5页 / 共12页
点击查看更多>>
资源描述

《2017年数据结构第三次作业》由会员分享,可在线阅读,更多相关《2017年数据结构第三次作业(12页珍藏版)》请在金锄头文库上搜索。

1、第第 3 3 次作业次作业 一、填空题(本大题共一、填空题(本大题共 3030 分,共分,共 1010 小题,每小题小题,每小题 3 3 分)分) 1. 具有 8 个顶点的无向图,边的总数最多为_。2. 树在计算机内的表示方式有 , , 。3. 设有一个 n 阶的下三角矩阵 A,如果按照行的顺序将下三角矩阵中的元素(包括对角线上元素)存放在 n(n+1)个连续的存储单元中,则 Aij与 A00之间有_个数据元素。4. 队列是限制插入只能在表的一端,而删除在表的另一端进行的线性表,其特点是_。5. 在广义表的存储结构中,单元素结点与表元素结点有一个域对应不同,各自分别为_域和_域。6. 构造连通

2、网最小生成树的两个典型算法是_。7. 在一个稀疏矩阵中,每个非零元素所对应的三元组包括该元素的_、_和_三项。8. 已知一棵度为 3 的树有 2 个度为 1 的结点,3 个度为 2 的结点,4 个度为 3 的结点,则该树有 个叶子结点。9. 非空的单循环链表 head 的尾结点(由 p 指针所指)满足条件_。10. 在哈希文件中,处理冲突的方法通常有_、_ 、_和_四种。二、算法设计题(本大题共二、算法设计题(本大题共 2020 分,共分,共 2 2 小题,每小题小题,每小题 1010 分)分) 1. 回文是指正读反读均相同的字符序列,如“abba“和“abdba“均是回文,但“good“不是

3、回文。试写一个算法判定给定的字符向量是否为回文。2. 编写一个算法将一个头结点指针为 pa 的单链表 A 分解成两个单链表 A 和 B,其头结点指针分别为 pa 和 pb,使得 A 链表中含有原链表 A 中序号为奇数的 元素,而链表 B 中含有原链表 A 中序号为偶数的元素,且保持原来的相对顺序。三、简答题(本大题共三、简答题(本大题共 2020 分,共分,共 4 4 小题,每小题小题,每小题 5 5 分)分) 1. 何时选用顺序表、何时选用链表作为线性表的存储结构为宜?2. 一棵度为 2 的树与一棵二叉树有何区别?3. 指出下述程序段的功能是什么? void Demo1( SeqStack

4、*S, int m) / 设 DataType 为 int 型SeqStack T; inti;InitStack (while (! StackEmpty( S)if( i=Pop(S) !=m) Push( while (! StackEmpty( Push(S,i);4. 给定集合15,3,14,2,6,9,16,17(1)(3 分)用表示外部结点,用表示内部结点,构造相应的 huffman 树:(2) (2 分)计算它的带权路径长度:(3)(2 分)写出它的 huffman 编码:(4)(3 分)huffman 编码常用来译码,请用语言叙述写出其译码的过程。四、程序设计题(本大题共四、

5、程序设计题(本大题共 3030 分,共分,共 2 2 小题,每小题小题,每小题 1515 分)分) 1. 以二叉链表为存储结构,写出求二叉树叶子总数的算法 2. 设线性表的 n 个结点定义为(a0,a1,.an-1),重写顺序表上实现的插入算法: InsertList 答案:答案:一、填空题(一、填空题(3030 分,共分,共 1010 题,每小题题,每小题 3 3 分)分)1. 参考答案:参考答案:28解题方案:解题方案:评分标准:评分标准:2. 参考答案:参考答案:双亲链表表示法,孩子链表表示法,孩子兄弟表示法解题方案:解题方案:评分标准:评分标准:3. 参考答案:参考答案:i(i+1)/

6、2+j-1解题方案:解题方案:评分标准:评分标准:4. 参考答案:参考答案:先进先出解题方案:解题方案:评分标准:评分标准:5. 参考答案:参考答案:值(或 data), 子表指针(或 sublist)解题方案:解题方案:评分标准:评分标准:6. 参考答案:参考答案:普里姆(prim)算法和克鲁斯卡尔(Kruskal)算法解题方案:解题方案:评分标准:评分标准:7. 参考答案:参考答案:行号、列号、元素值解题方案:解题方案:评分标准:评分标准:8. 参考答案:参考答案:12解题方案:解题方案:评分标准:评分标准:9. 参考答案:参考答案:p-next=head 解题方案:解题方案:评分标准:评

7、分标准:10. 参考答案:参考答案:开放地址法、再哈希法、链地址法、建立一个公共溢出区解题方案:解题方案:评分标准:评分标准:二、算法设计题(二、算法设计题(2020 分,共分,共 2 2 题,每小题题,每小题 1010 分)分)1. 参考答案:参考答案:算法可设计为:/以下为顺序栈的存储结构定义#define StackSize 100 /假定预分配的栈空间最多为 100 个元素typedef char DataType;/假定栈元素的数据类型为字符typedefstructDataType dataStackSize;int top;SeqStack; intIsHuiwen( char

8、*t)/判断 t 字符向量是否为回文,若是,返回 1,否则返回 0SeqStack s;inti , len;char temp;InitStack( len=strlen(t); /求向量长度for ( i=0; i#includetypedef int ElemType;typedef struct LNodeElemType data; /数据域struct LNode *next; /指针域LNode,*LinkList;void divide(LinkList pb-next=NULL; r=pb; p=pa-next; while(p!=NULL if(q!=NULL) p-nex

9、t=q-next; r-next=q; r=q; p=p-next; r-next=NULL; 解题方案:解题方案:评分标准:评分标准:三、简答题(三、简答题(2020 分,共分,共 4 4 题,每小题题,每小题 5 5 分)分)1. 参考答案:参考答案:在实际应用中,应根据具体问题的要求和性质来选择顺序表或链表作为线性表的存储结构,通常有以下几方面的考虑:(1)基于空间的考虑。当要求存储的线性表长度变化不大,易于事先确定其大小时,为了节约存储空间,宜采用顺序表;反之,当线性表长度变化大,难以估计其存储规模时,采用动态链表作为存储结构为好。(2)基于时间的考虑。若线性表的操作主要是进行查找,很

10、少做插入和删除操作时,采用顺序表做存储结构为宜;反之, 若需要对线性表进行频繁地插入或删除等的操作时,宜采用链表做存储结构。并且,若链表的插入和删除主要发生在表的首尾两端,则采用尾指针表示的单循环链表为宜。解题方案:解题方案:评分标准:评分标准:2. 参考答案:参考答案:度为 2 的树从形式上看与二叉树很相似,但它的子树是无序的,而二叉树是有序的。即, 在一般树中若某结点只有一个孩子,就无需区分其左右次序,而在二叉树中即使是一个孩 子也有左右之分。解题方案:解题方案:评分标准:评分标准:3. 参考答案:参考答案:程序段的功能是利用栈 T,将一个非空栈 S 中值等于 m 的元素全部删去。解题方案

11、:解题方案:评分标准:评分标准:4. 参考答案:参考答案:(1)P_6997A30C3A6948EE8884C1930ADA23B8(2)wpl=(2+3)*5+6*4+(9+14+15)*3+(16+17)*2=229(3)编码为:15:111, 3:10101, 14:110, 2:10100, 6:1011, 9:100, 16:00, 17:01(4) 常用哈夫曼树为通讯用的字符编码,本题中集合的数值解释为字符发生的 频率(次数)。由哈夫曼树构造出哈夫曼编码。译码时,进行编码的“匹配”, 即从左往右扫描对方发来的“编码串”,用字符编码去匹配,得到原来的元素 (本题中的数)。解题方案:解

12、题方案:评分标准:评分标准:四、程序设计题(四、程序设计题(3030 分,共分,共 2 2 题,每小题题,每小题 1515 分)分)1. 参考答案:参考答案:typedef char DataType;/定义 DataType 类型 typedefstruct node DataType data; struct node *lchild, *rchild;/左右孩子子树 BinTNode; /结点类型 typedefBinTNode *BinTree ;/二叉树类型 int Leaf(BinTree T) /算叶子数 if(T) if (T-lchild=NULL) elsereturn L

13、eaf(T-lchild)+Node(T-rchild); elsereturn 0; 解题方案:解题方案:评分标准:评分标准:2. 参考答案:参考答案:#define ListSize 100 / 假定表空间大小为 100 typedef int DataType;/假定 DataType 的类型为 int 型 typedef structDataType dataListSize;/ 向量 data 用于存放表结点int length; / 当前的表长度 Seqlist;/以上为定义表结构void InsertList ( Seqlist *L, Datatype x, int i)/将新结点 x 插入 L 所指的顺序表的第 i 个结点 ai 的位置上,即插入的合法位置为:0lengthint j;if ( i L - length )Error(“position error“);/ 非法位置,退出,该函数定义见教材 P7.if ( L-length=ListSize )Error(“overflow“);for ( j=L-length-1 ; j = i ; j -)L-data j+1=L-data j ;L-data i =x ;L-length+ ;解题方案:解题方案:评分标准:评分标准:

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 习题/试题

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号