




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、数据结构实验三哈夫曼树实验报告 题目:哈夫曼编译码器 一、题目要求: 写一个哈夫曼码得编译码系统,要求能对要传输得报文进行编码与解码。构造哈夫曼树时,权值小得放左子树,权值大得放右子树,编码时右子树编码为 1,左子树编码为 0、 二、概要设计: 数据结构: tpeef struct nt btmaxbi; int str; hcodtype; /* 编码结构体 / typede strut int wegt; t parent; it lchld; int rild; char alue; hnd; /* 结点结构体 * 函数: void enhuffmare (hnode huffndxd,
2、 it n) 作用:构造一个哈夫曼树,并循环构建 it in () 作用:运用已经构建好得哈弗曼树,进行节点得处理,到达成功解码编译 三、详细设计: 哈夫曼树得建立: void demohufmntree (hnode hfndemxnode, int ) i 0, j, m, m, x1, x; chr x; /* 初始化存放哈夫曼树数组 fode 中得结点 */ wil (in) ufnodi、wegt = ;/权值 hffno、paent -1; hufn、lchld =-1; hufnode、rid ; ? snf(%c",&x); scan(”c",huf
3、fnoei、lu); /实际值,可根据情况替换为字母 i+; 输入 n 个叶子结点得权值 ;)&,"%"(fas? fo(i=;in;i+) scn (”%, hfode、weight); or (i=; i2*n-1; i+) huffodei、eight 0;/权值 foei、arent =1; hffnoi、lchld =1; ufnodi、rchild -1; huffdei、vluei; / 循环构造 huffmn 树 / fo (i0; in1; +) m=m2=maxq; / m1、m2 中存放两个无父结点且结点权值最小得两个结点 x=2=0;/找出所
4、有结点中权值最小、无父结点得两个结点,并合并之为一颗二叉树 for (j=0; +i; j+) if (hffnoej、egt < m && huffnoej、prt=1) m2m1;/m1 中就是最小 x=x1; m1=huffnodj、weigt; x1=j; ele if (huffndj、wegt m2 & uffnodj、arent=-1) m2=huffnoej、eiht; x2j; ed fr */ * 设置找到得两个子结点 x1、x2 得父结点信息 / huffnode、parent = n+i; huffnod2、prnt = i; hffode
5、i、weight = huffnox1、wight + huffnodex2、wih; hufne+i、cil x; hufodn+、rild = 2; 叶子节点得哈夫曼编码得保存: or (j=cd、start+; jn; j) hfodi、itj = cd、bij; huffodi、stt = d、sart; 主函数展示: int ai() hnde hufnodemaxoe; hcodetype hffodeaxaf,cd; int i, , c, p, n,k; ch en10; char z; can ("%”, &); hfmntree (huffnoe, );
6、for (; < ; i+) cd、strt = n-; c ; p = hffnodec、prnt; whi (p != ) * 父结点存在 */ if (huffndep、child = c) d、bitcd、srt = 0; ls cd、bitc、tart = 1; d、start-; 求编码得低一位 */ c=p; hufnde、arent; /* 设置下一循环条件 */ / end while or (j=d、sar+1; ? else; ? ;)”n"(ftnirp? for(i=0;i 虽然哈夫曼树得建立有书上得参考,但就是实际写整个代码得时候还就是问题重重。首先
7、就就是哈弗曼树忘记了初始得赋值,导致最后出现了问题。这样得错误还就是很容易解决,但就是之后就出现了 wa得情况。在同学得帮助下,最后发现就是因为在选取节点得时候,循环出现了问题,虽然瞧起来编译没有错,但就是边缘情况就会出现数据错误,这个还就是很令人警醒,而这种思考得不全面得问题,在bu得过程中会耗去大量得时间,这就是要注意得。 五、用户操作说明: 输入表示字符集大小为 n(n <= 10)得正整数,以及 n 个字符与 n 个权值(正整数,值越大表示该字符出现得概率越大); 输入串长小于或等于 100 得目标报文。 六、运行结果: 附带自己得算法完成得结果图,可以通过rt sc 与图片器获
8、得; 七、附录: inclu <tdio、h inlde<tdli、 ein mabit 0 efne maxlef defin mxode maxleaf*2 1 #defie axqz 100 /权值 ypeef strct nt btabit; it start; hodtype; /* 编码结构体 * yedef truct nt igh; int paret; int lchil; int rchld; char vlu; hnode; / 结点结构体 / 构造一颗哈夫曼树 */ vid hufmantree (hde hufnodmxnode, int ) int i
9、, , 1, m2, 1, 2; cr x; 初始化存放哈夫曼树数组 ffnd 中得结点 / whe (n) hnoi、eight 0;/权值 huffoe、parent =-; ufnodei、lchl ; hufndi、child -1; ;)x&,"c%"(nacs? scanf("%",&uffdei、value); /实际值,可根据情况替换为字母 ; / 输入 n 个叶子结点得权值 * ;)x&,"c%”(fnacs? i = 0; while (in) anf (%", &ufne、iht)
10、; i+; o (i=n; i2*1; i+) hufnode、weight = 0;/权值 ufodi、arent =-1; hundei、lhil =1; hffnei、rchild =-; uffnoe、vl=; /* 循环构造 huffman 树 */ or (i; in-1; i+) =mmaxq; / 1、2 中存放两个无父结点且结点权值最小得两个结点 x1x2=0;/找出所有结点中权值最小、无父结点得两个结点,并合并之为一颗二叉树 for (0; ni; j+) if (huffnoj、weiht < 1 & ufndej、part1) 2m1;/m1 中就是最小
11、x2=x1; mhuffndej、wight; x1=j; els f (ufnodj、weight < m2 & huffj、parent=) m2=hufnj、wg; x2=j; / end for * /* 设置找到得两个子结点 1、x2 得父结点信息 */ ufndex1、an = i; ufodex2、parent = n+i; uffnde+、weight = ufndx1、weght + hufnodex2、weight; hunode+i、lcild = x1; huffnen、chld 2; t in() hno noemaxnode; 定义一个结点结构体数组
12、hcodpe uodemal,; /* 定义一个编码结构体数组, 同时定义一个临时变量来存放求解编码时得信息 */ int i, j, c, p, n,k0; har we100; char z; scanf (”%d”, &n); hufmantree (hffode, n); fr (=; i < n; i+) cd、sr = n-; = ; = huffnoc、parent; ile (p ! 1) /* 父结点存在 */ if (hufde、lchild = c) d、btcd、star = 0; ls d、icd、start = 1; cd、str-; /* 求编码得低
13、一位 */ ; p=uffnodec、parent; /* 设置下一循环条件 / n while / 保存求出得每个叶结点得哈夫曼编码与编码得起始位 */ or (j=c、str+1; jn; j+) hufcode、bi = c、bij; fodei、start = cd、sat; end o / zgetcha(); gecar(); for(;z!=;=gechar() ;=+knew? )+i;n 5、实验报告不用写出算法,只要写出对课程设计得见解,如对某一算法得改良思想,算法设计思想,调试算法过程中出现得问题及改良方法,调试程序得体会等。只要就是自己编程与 调试就会写出相应得报告。 考核标准 1、机试程序与结果、设计报告缺一不可
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025信息技术服务合同智能设备配套产品订购合同
- 2025进出口商品交易合同协议书
- 2025标准公司借款合同范本
- 2025科技公司股东合同范本2
- 2025中外合作出版合同范本
- 2025茶叶代加工合同范本
- 2025广州市合同范本标准模板
- 《肺癌内科治疗》课件
- 《茶文化研究》课件
- 《砖的分类》课件
- 食品安全自查、从业人员健康管理、进货查验记录、食品安全事故处置等保证食品安全的规章制度
- 物理实验通知单记录单初二上
- 北大企业家俱乐部
- 国家开放大学《人文英语4》边学边练参考答案
- DBJ51T 196-2022 四川省智慧工地建设技术标准
- 企业培训5W2H分析法(31P PPT)
- 钥匙移交清单
- DB11-T211-2017园林绿化用植物材料木本苗
- 关于完善和落实罪犯互监制度的思考
- GB∕T 40501-2021 轻型汽车操纵稳定性试验通用条件
- 认识浮力+阿基米德原理
评论
0/150
提交评论