ImageVerifierCode 换一换
格式:DOCX , 页数:11 ,大小:19.27KB ,
资源ID:6027215      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/6027215.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(数据结构第3次.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

数据结构第3次.docx

1、数据结构 第3次第3次作业一、填空题(本大题共30分,共 10 小题,每小题 3 分)1. 栈是一种特殊的线性表,允许插入和删除运算的一端称为 _ 。不允许插入和删除运算的一端称为 _ 。2. 二叉树由 , , 三个基本单元组成。3. 构造连通网最小生成树的两个典型算法是_。4. 在一个稀疏矩阵中,每个非零元素所对应的三元组包括该元素的_、_和_三项。5. 直接插入排序用监视哨的作用是_。6. AOV网中,结点表示_,边表示_。AOE网中,结点表示_,边表示_。7. 已知指针p指向单链表L中的某结点,则删除其后继结点的语句是_。8. 一棵深度为6的满二叉树有_个分支结点和_个叶子。9. 已知二

2、叉树前序为ABDEGCF,中序为DBGEACF,则后序一定是 。10. 在哈希文件中,处理冲突的方法通常有_、_ 、_和_四种。二、算法设计题(本大题共20分,共 2 小题,每小题 10 分)1. 编写一个算法将一个头结点指针为pa的单链表A分解成两个单链表A和B,其头结点指针分别为pa和pb,使得A链表中含有原链表A中序号为奇数的元素,而链表B中含有原链表A中序号为偶数的元素,且保持原来的相对顺序。2. 设稀疏矩阵Mmxn中有t个非零元素,用三元组顺序表的方式存储。请设计一个算法,计算矩阵M的转置矩阵N,要求转置算法的时间复杂度为O(n+t)。三、简答题(本大题共20分,共 4 小题,每小题

3、 5 分)1. 假设用于通信的电文由字符集a,b,c,d,e,f,g,h中的字母构成,这8个字母在电文中出现的概率分别为0.07,0.19,0.02,0.06,0.32,0.03,0.21,0.10. (1)为这8个字母设计哈夫曼编码。 (2)若用这三位二进制数(07)对这8个字母进行等长编码,则哈夫曼编码的平均码长是等长编码的百分之几?它使电文总长平均压缩多少?2. 若二叉树中各结点的值均不相同,则由二叉树的前序序列和中序序列,或由其后序序列和中序序列均能唯一地确定一棵二叉树,但由前序序列和后序序列却不一定能唯一地确定一棵二叉树。 (1)已知一棵二叉树的前序序列和中序序列分别为ABDGHCE

4、FI和GDHBAECIF,请画出此二叉树。 (2)已知一棵二叉树的在序序列和后序序列分别为BDCEAFHG和DECBHGFA,请画出此二叉树。 (3)已知一棵二叉树的前序序列和后序序列分别为AB和BA,请画出这两棵不同的二叉树。3. 试举一个数据结构的例子、叙述其逻辑结构、存储结构、运算三个方面的内容。 4. 给定集合15,3,14,2,6,9,16,17(1)(3分)用表示外部结点,用表示内部结点,构造相应的huffman树:(2) (2分)计算它的带权路径长度:(3)(2分)写出它的huffman编码:(4)(3分)huffman编码常用来译码,请用语言叙述写出其译码的过程。四、程序设计题

5、(本大题共30分,共 2 小题,每小题 15 分)1. 以二叉链表为存储结构,写出求二叉树叶子总数的算法 2. 设线性表的n个结点定义为(a0,a1,.an-1),重写顺序表上实现的插入算法:InsertList 答案:一、填空题(30分,共 10 题,每小题 3 分)1. 参考答案:栈顶,栈底解题方案:评分标准:2. 参考答案:根结点,左子树,右子树解题方案:评分标准:3. 参考答案:普里姆(prim)算法和克鲁斯卡尔(Kruskal)算法解题方案:评分标准:4. 参考答案:行号、列号、元素值解题方案:评分标准:5. 参考答案:免去查找过程中每一步都要检测整个表是否查找完毕,提高了查找效率。

6、解题方案:评分标准:6. 参考答案:(1)活动(2)活动间的优先关系(3)事件(4)活动边上的权代表活动持续时间解题方案:评分标准:7. 参考答案:q=p-next; p-next=q-next; free(q);解题方案:评分标准:8. 参考答案:n1+n2=0+ n2= n0-1=31,26-1 =32解题方案:评分标准:9. 参考答案:DGEBFCA解题方案:评分标准:10. 参考答案:开放地址法、再哈希法、链地址法、建立一个公共溢出区解题方案:评分标准:二、算法设计题(20分,共 2 题,每小题 10 分)1. 参考答案:将单链表A中的所有偶数序号的结点删除,并在删除时把这些结点链接起

7、来构成单链表B。算法如下: #include#includetypedef int ElemType;typedef struct LNodeElemType data; /数据域struct LNode *next; /指针域 LNode,*LinkList;void divide(LinkList&pa, LinkList&pb) pb=(LNode *)malloc(sizeof(LNode *); pb-next=NULL; r=pb; p=pa-next; while(p!=NULL & p-next!=NULL) q=p-next; if(q!=NULL) p-next=q-nex

8、t; r-next=q; r=q; p=p-next; r-next=NULL; 解题方案:评分标准:2. 参考答案:转置可按转置矩阵的三元组表中的元素顺序进行,即按稀疏矩阵的列序。这种方法时间复杂度是O(n*t),当t和m*n同量级时,时间复杂度为O(n3)。另一种转置方法称作快速转置,使时间复杂度降为O(m*n)。需要求出每列非零元素个数和每列第一个非零元素在转置矩阵三元组表中的位置,因此设置了两个附加向量。下面分别给出两个算法。TSMatrixTransMatrix(TSMatrixM,TSMatrix N)采用三元组表方式存储,按列序实现矩阵的转置N.m=M.n; N.n=M.m; N

9、.len=M.len; 行数、列数和非零元素个数 if(N.len)ql; 设置N中第一个非零元素从下标1开始存储for(j1;jM.n;j+) 按列,共M.n列 for(p1;pM.len; +p) 在M.len个元素中查找 if(M.datap.col=j) 转置N.dataq.row=M.datap.col;N.dataq.col=M.datap.row;N.dataq.e=M.datap.e; q+; return N;TransMatrixTSMatrixFastTransMatrix(TSMatrix M, TSMatrix N)三元组表上实现矩阵的快速转置的算法N.m=M.n;

10、N.n=M.m; N.len=M.len;if(M.len) for(j=1;j=M.n;j+) numbj=0; 矩阵M每一列非零元初始化为零 for(t=1;t=M.len;t+)numbM.datat.col+;求矩阵M每一列得非零元个数pos1=1; 第1列第一个非零元在转置后的三元组中下标是1 for(j=2;j=M.n;j+) 求M.data第j列第一个非零元在N.data中的序号poscol=poscol-1+numcol-1; for(p=1;plchild=NULL)&(T-rchild=NULL) return 1; else return Leaf(T-lchild)+N

11、ode(T-rchild); else return 0; 解题方案:评分标准:2. 参考答案:#define ListSize 100 / 假定表空间大小为100typedef int DataType;/假定DataType的类型为int型typedef struct DataType dataListSize;/ 向量data用于存放表结点 int length; / 当前的表长度 Seqlist; /以上为定义表结构void InsertList ( Seqlist *L, Datatype x, int i)/将新结点x插入L所指的顺序表的第i个结点ai的位置上,即插入的合法位置为:0=ilengthint 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+ ;解题方案:评分标准:

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1