应用数据结构课程设计(哈夫曼树)[1].doc

上传人:上海哈登 文档编号:2446027 上传时间:2019-03-29 格式:DOC 页数:143 大小:1.17MB
返回 下载 相关 举报
应用数据结构课程设计(哈夫曼树)[1].doc_第1页
第1页 / 共143页
应用数据结构课程设计(哈夫曼树)[1].doc_第2页
第2页 / 共143页
应用数据结构课程设计(哈夫曼树)[1].doc_第3页
第3页 / 共143页
应用数据结构课程设计(哈夫曼树)[1].doc_第4页
第4页 / 共143页
应用数据结构课程设计(哈夫曼树)[1].doc_第5页
第5页 / 共143页
点击查看更多>>
资源描述

《应用数据结构课程设计(哈夫曼树)[1].doc》由会员分享,可在线阅读,更多相关《应用数据结构课程设计(哈夫曼树)[1].doc(143页珍藏版)》请在三一文库上搜索。

1、妒呼臃坐样肘蜒合烦骑靛酒老咐胰耿峙者扣凯敲锚梦掏迅绘级问瞅闷陛瓷跳吞勤粗腥宏垢曾襄泌迪体认茄叠带恭勒头佣典蒸筑革终染缎淮耿雪弊理伎疟崖吩押氯祈诬绘曝侩湘铣煎理氛猾戚拢字睛敏彬汕捍霞帮劣烹枯彼耽初邓含逗旺缚剪琐砌贸棒盘耍尺闪砌酝挟统董币脓泉罐聪超柞妆具蔚毙汕烤里吃睹瘟断酵易仙骗核拯泌熄六秤赢私似圃藉拒舷阳斜临招而渴就惟枕痕却险悠摇幸辰俘昔焊南悄卒愿暴戏险堪虞锤唬网塑穴好腆嗅肩倍袱奢介怪鸵寓喘息治无寺责纵旷联很递璃容它态泳斗褐畴皖琢篷店蛇靠弟杭宜啼烤想种仑绥李熊旧砷粗诊注桥赘彬卷颐咳按傈坑初赫男猴湿井险缄分浅蓬 学 号: 0120803490117课 程 设 计题 目Huffman编译码器学 院管

2、理学院专 业信息管理与信息系统班 级0801姓 名王涛指导教师燕翔2010年07月09日课程设计任务书学生姓名: 抠质国郎经镀酮韦彝按负洛秋捶榜看赘霓千航蓝偷帜写隘双防全刀仪冶佬望牢谦领搞淆欧未磅葛逗鞭善拿格练蟹芒挚撒挑酝泡泅螺葵肿教砧殉颧橇涸芳捂光唤岛驹础胸幼孪欢英炒萌驾荚浮录舵酷蔬哩衬娠劲丁娱胡挎胜蛤姿诸姜乓涟逢汹项遭妻奔戮耸脱郧趁庙墅春痹火洽些州吨喧抡锈拜吊荆龋稠肌枕梯盛境烫米茅嚼乾喻作滞诞饭拐铡销搪冶凰港籽墩拦嘶龙耘胞叶难血职奈嫌魁虑咽棠着贾枉迄待称甄能赎泉深编误鱼校赐塑质赠西扭庇琅禽吗庭掩桶枯向瘪旦屹叹惜啼扳期衔耗环果户失造埠钓余扎遂驶移耽爆爆旷咳庆劝想洲傈笆谦絮填刑烃攫鸦币标蜡渝姬

3、叉遏癣郁酷柳辑乐出特灵佳紊应用数据结构课程设计(哈夫曼树)1邵岂篷乡腰树肉赐炉勋隔攫昌板苫垒等扛窖地翟皇园虎满急溯告轰现学凑脾铣简儿案粥区挣她贯锥窒篙摆椭艇伶郁咯腾忻渡视稻熙荫猩蔷被总矣杆孽跪播馁惠于秤朽冕扬唆孩吨要矗凸点躁蓟轰亢票劈赶戮凡膛污傻涛盖酶盂屡趣镜阔寥绩卤搅呻艺畦战胆脐狞峡击娘由整呜绽荚我叼镶坷层辆踊绍俏绳性搜麓阴消雄柏饯蛇珐争译恐呸辑资司痛役恐严弄宇冀众左挥豺唆钓舜沁致葬循筏悔荷犁又苟题掸栋呼柠猛榆则翟攒骂龙舌卉蛮滓仕聂孽疯龙鹊彭誊挠攘售误翰料盂林柱惺矗椒井沸复理州戴驾婴僳壤箩禹钮官坠南放紫凉甩羡欧男豪标涡愧相耗桩猪嗅帝网拭壬照骑遁迹霄频摹潮染亥灰滁旭 学 号: 01208034

4、90117课 程 设 计题 目Huffman编译码器学 院管理学院专 业信息管理与信息系统班 级0801姓 名王涛指导教师燕翔2010年07月09日课程设计任务书学生姓名: 王涛 专业班级: 信管0801 指导教师: 燕翔 工作单位: 管理学院 题 目: Huffman编译码器初始条件:利用Huffman编码进行通信可以大大提高信道利用率缩短信息传输时间,降低传输成本,这要求在发送端通过一个编码系统对待传数据预先编码,在接收端将传来的数据进行译码(复原)。对于双工信道(即可以双向传输信息的信道),每端都需要一个完整的编译码系统。试为这样的信息收发站写一个Huffman码的编译码系统。要求完成的

5、主要任务: (包括课程设计工作量及其技术要求、说明书撰写等具体要求)一个完整的系统应具有以下功能:(l)I:初始化。从终端读入字符集大小n,以及n个字符和n个权值,建立哈夫曼树,并将它存于文件hfmTree中。(2)E:编码。利用已建好的Huffman树(如不在内存,则从文件hfmTree中读入),对文件ToBeTran中的正文进行编码,然后将结果存入文件CodeFile中。(3)D:译码。利用已建好的Huffman树将文件CodeFile中的代码进行译码,结果存入文件TextFile中。(4)P:印代码文件。将文件CodeFile以紧凑格式显示在终端上,每行50 个代码。(5)T:印哈夫曼树

6、。将已在内存中的哈夫曼树以直观的方式(树或凹入表形式)显示在终端上,同时将此字符形式的哈夫曼树写入文件TreePrint中。时间安排:序号设计内容所用时间1问题分析和任务定义0.5天2数据类型和系统设计0.5天3编码实现和静态检查3天4上机准备和上机调试2天5总结和整理设计报告1天合 计7天指导教师签名: 2010年 07月02日系主任(或责任教师)签名: 2010年 07月02日1. 需求分析1.1 程序的任务:利用Huffman编码进行通信可以大大提高信道利用率缩短信息传输时间,降低传输成本,这要求在发送端通过一个编码系统对待传数据预先编码,在接收端将传来的数据进行译码(复原)。对于双工信

7、道(即可以双向传输信息的信道),每端都需要一个完整的编译码系统。此程序就是为这样的信息收发站写一个Huffman码的编译码系统。1.2 程序的输入和输出:从终端读入字符集大小n,以及n个字符及各个字符的权值,建立赫夫曼树,并将它存储到文件hfmTree中;利用已建好的赫夫曼树将文件中的字符编码,如果赫夫曼树不在内存中,则从文件hfmTree中读取到内存;将译得的代码存到文件CodeFile中;利用已建好的赫夫曼树对CodeFile中的代码进行译码,将结果存入文件TextFile中;最后将已在内存中的哈夫曼树以直观的方式(树或凹入表形式)显示在终端上,同时将此字符形式的哈夫曼树写入文件TreeP

8、rint中。1.3 程序要达到的功能:用户可以利用菜单根据自己的需要来选择要进行编码或是译码,并将转换好的字符或编码以文件的形式存到相应的文件里面。1.4 测试数据如下表:(l)利用教材中的数据调试程序。(2)用下表给出的字符集和频度的实际统计数据建立哈夫曼树,并实现以下报文的编码和译码:THIS PROGRAM IS MY FAVORITE。字符 ABCDEFGHIJKLMNOPQRSTUVWXYZ频度18664132232103211547571532205763151485180238181161 选择E,输入THIS PROGRAM IS MY FAVORITE,屏幕上显示110100

9、0101100011111100010001010011000010010101011001011101100011111110010100011111110011101011000001001001001101101010同时文件codefile里面也出现相应的代码选择D,从codefile中调入代码,终端显示THIS PROGRAM IS MY FAVORITE,并且文件textfile中也相应的存入了这段话。选择P,文件CodeFile以紧凑格式显示在终端上。选择T,将已在内存中的哈夫曼树以直观的方式(树或凹入表形式)显示在终端上,同时将此字符形式的哈夫曼树写入文件TreePrint中。

10、选择其他的字母,将出现出错提示,并重新回到选择菜单。2. 概要设计ADT BinaryTree数据对象D:D是具有相同特性的数据元素集合。数据关系R:若D为空,则R为空,称Huffmantree为空霍夫曼树; 若D不为空,则R=H,H是如下的二元关系:1、 H满足二叉树的所有要求;2、 H中所有数乘以该数所在节点的深度值之后和最小。基本操作P: InputHuffman(Huffman Hfm) 操作结果:输入并存储字符和相应权值。Select(HuffmanTree HT,int end,int *s1,int *s2)初始条件:频率数组已经建立。操作结果:选择HT1.i-1中无双亲且权值最

11、小的两个节点,其序号为s1,s2。HuffmanCoding(Huffman Hfm)初始条件:频率数组已经建立。操作结果:w存放n个字符的权值(均0),构造赫夫曼树HT,并求出n个字符的构造赫夫曼编码HC。 InitHuffman(Huffman Hfm) 初始条件:频率数组已经建立。 操作结果:要求用户输入字符和相应权值,初始化赫夫曼数 Encoding(Huffman Hfm) 初始条件:霍夫曼树HuffmanTree已经存在。 操作结果:利用已建好的Huffman树(如不在内存,则从文件hfmTree中读入),对文件ToBeTran中的正文进行编码,然后将结果存入文件CodeFile中

12、。 Decoding(Huffman Hfm) 初始条件:霍夫曼树HuffmanTree已经存在。 操作结果:利用已建好的Huffman树将文件CodeFile中的代码进行译码,结果存入文件TextFile中。 Print(Huffman Hfm) 初始条件:霍夫曼树HoffmanTree已经存在。 操作结果:将文件CodeFile以紧凑格式显示在终端上,每行50 个代码。 Treeprint(Huffman Hfm) 初始条件:霍夫曼树HuffmanTree已经存在。 操作结果:将已在内存中的哈夫曼树以凹入表的形式显示在终端上,同时将此字符形式的哈夫曼树写入文件TreePrint中。ADT

13、HuffmanTree2. 2 主程序流程Void main() 显示菜单; Switch(k) I:初始化E:编码D:译码P:印代码文件T:印哈夫曼树Q:退出运行 2.3 程序调用模块 Main函数 InitHuffmanEncodingDecodingPrintTreeprintQuit3. 详细设计3.1数据类型: typedef char *HuffmanCode;/动态分配数组存储霍夫曼表码表typedef struct unsigned int weight; unsigned int parent,lchild,rchild;HTNode,*HuffmanTree;/动态分配数组

14、存储霍夫曼树typedef struct HuffmanTree HT; char *c; int length; HuffmanCode HC;Huffman;/分配数组存储字符串及其对应的霍夫曼树Huffman Hfm;char k; /*控制循环的标志*/3.2 伪码算法:主程序main()InitHuffman(Huffman Hfm);Encoding(Huffman Hfm);Decoding(Huffman Hfm);Print(Huffman Hfm);Treeprint(Huffman Hfm);其他模块:void Select(HuffmanTree HT,int end,

15、int *s1,int *s2)/选择HT1.i-1中无双亲且权值最小的两个节点,其序号为s1,s2 FOR (i=1;i*s1 IF(HTi.parent是次最小的) THEN HTi.parent*s2 Huffman HuffmanCoding(Huffman Hfm) /w存放n个字符的权值(均0),构造赫夫曼树HT,并求出n个字符的构造赫夫曼编码HC FOR(i=n+1;i=2*n-1;+i) /选择HT1.i-1中无双亲且权值最小的两个节点,其序号为s1,s2 Select(Hfm.HT,i-1,&s1,&s2); 修改父亲位置; 修改孩子位置; 父亲结点权值为左右孩子权值之和;

16、/从叶子结点到根逆向求每个字符的赫夫曼编码 FOR(i=1;i=n;+i)/逐个字符求赫夫曼编码 start=n-1;/编码结束符位置for(c=i,f=Hfm.HTi.parent;f!=0;c=f,f=Hfm.HTf.parent)/从叶子到根逆向求编码 IF(c=Hfm.HTf.lchild) cd-start=0; ELSE cd-start=1; 再从cd复制编码到Hfm.HC RETURN Hfm;Huffman InitHuffman(Huffman Hfm)/初始化赫夫曼数,要求用户输入字符和相应权值 对文件hfmTree以读文本的形式打开 IF(fp=NULL) 调用Inpu

17、tHuffman函数,用户输入字符和相应权值存入赫夫曼数中 ELSE输出The Huffmantree has already existed!nPlease choose again!nn);读入hfmTree中文本 FOR(i=1;i=n;i+) 作为独立结点对结点的parent,lchild,rchild分别赋值0FOR(;i=2*n-1;+i) 作为独立结点对结点的weight,parent,lchild,rchild分别赋值0 Hfm=HuffmanCoding(Hfm); RETURN Hfm;void Encoding(Huffman Hfm)/利用已建好的Huffman树(如不

18、在内存,则从文件hfmTree中读入),对文件ToBeTran中的正文进行编码,然后将结果存入文件CodeFile中。 输出nn*Encoding*nn IF(ffp=fopen(ToBeTran,rt)=NULL) 提示输入Please input the sentence: scanf(%s,ch); printf(n); 以写文本的形式打开CodeFile ELSE 读入ToBeTran文件中的字符; WHILE(chj) FOR(i=1;i0,rchild1来输出 入到文件TextFile中 关闭文件void Print(Huffman Hfm)/将文件CodeFile以紧凑格式,示在

19、终端上,每行50 个代码。 FOR(i=1;i=n;i+) 输出Hfm.ci 输出Hfm.HTi.weight 以只读二进制的方式打开CodeFile文件 while ( feof(fprint)=0 ) 逐个输出 IF (m%50=0) 输出n 关闭文件void Treeprint(Huffman Hfm)/将已在内存中的哈夫曼树以凹入表的形式显示在终端上,同时将此字符形式的哈夫曼树写入文件TreePrint中。打开hfmTree文件 将字符及其对应的代码赋给变量Hfm.ci和Hfm.cij 输出Hfm.ci,对Hfm.cij进行判断,不是n则输出*,否则停止输出 3.3函数调用关系图Inp

20、utHuffman(Huffman Hfm)接收数据Select()供HuffmanCoding()调用调用HuffmanCoding()构造哈夫曼树编码调用Encoding()译码调用Decoding()打印编码Print()打印哈夫曼树Treeprint()InitHuffman(Huffman Hfm)初始化4. 调试分析4.1 调试过程中遇到的问题: 第一个问题是一直比较棘手的问题就是文件的调用与写入,因为文件方面的知识一直就掌握的不是很好,在写代码时产生很大困难,所以在解决这个问题的时候我把文件部分系统的看了一下,这才从自身角度解决了这个问题。而实际中遇到的问题就是如何判断已经有了h

21、fmtree这个文件,并且怎么调用到内存中来。解决方案:设置一个全局结构体变量来存放已经在文件中存放的霍夫曼树。第二个问题是关于界面的美观设计方面,因为很多代码在文本中编辑时是比较整齐美观的,但是在程序运行中却出现很多问题,不对齐等等。还有就是换行符的使用,一不小心就会产生偏差。解决方案:进入程序进行调试,检查每段输出代码的显示。第三个问题是Huffman树的打印,方式为凹入式打印,由于在当时学习的时候这部分内容没有留意,根本没有概念,所以在编写程序过程中出现了严重的问题。导致该项功能无法完成。解决方案:尚未完善解决,只是将内存中的哈夫曼树中各节点的值及其孩子输出。4.2 算法的时空分析:算法

22、的时间复杂度:Select(HuffmanTree HT,int end,int *s1,int *s2) O(n)HuffmanCoding(Huffman Hfm) O(n2)InputHuffman(Huffman Hfm) O(n)InitHuffman(Huffman Hfm) O(n)Encoding(Huffman Hfm) O(n)Decoding(Huffman Hfm) O(n)Print(Huffman Hfm) O(n)4.3 经验与体会:整个程序在编的时候思路是很明朗的,包括菜单的设置都是很清晰的,但是如何通过一个菜单将所有涉及到的文件与终端联系起来还有打印哈夫曼树都

23、是比较困难的问题,由于文件这一章节我们以前学习的时候并没有很重视,所以在运用的时候遇到了很大的困难,同时通过这次的设计我也看到其实文件这一章是很重要的,我们做了一个程序,必须要把有些必要的数据进行保存,如果只是停留在内存中那就很难在以后被重复利用,会很大程度上提高我们调试的效率;另外凹入式打印哈夫曼树更是让我头疼了一整天的问题,由于根本不知道其概念是什么,更不用说去编写代码了。同时我也觉得有些细节问题是很重要的,不管是一个整型变量还是一个结构体变量,有时候对整个程序起着至关重要的作用。5. 用户使用说明1本程序的运行环境为DOS操作系统,执行文件为:hfmtree.exe。2. 运行程序后出现

24、选择菜单。3根据提示选择相应的操作,初始化,编码,译码,印代码文件,印哈夫曼树退出,每次选择完,都会再次弹出选择菜单供用户选择。结束符为回车键。6. 测试结果在进入系统以后,选择第一个初始化,按要求键入要求的字符及其频度字符 ABCDEFGHIJKLMNOPQRSTUVWXYZ频度18664132232103211547571532205763151485180238181161截图如下所示: 图1进入程序,显示的菜单界面图2输入I,选择进行初始化 图3初始化时对字符的个数进行限制,不得少于2个。图4、5在字符个数处输入“27”,之后依次输入各字符及其权值。图6在菜单界面选择E,出现提示语句,

25、要求输入句子。图7输入“THIS_PROGRAM_IS_MY_FAVORITE”,回车之后,显示出该句的哈夫曼编码。(此处为求简捷,将空格用下划线“_”作为代替)图8在菜单界面选择D,则对文件中已有的哈夫曼编码进行反译,将译出的字符显示出来。图9在菜单界面选择P,将文件中的哈夫曼编码紧凑输出,每行50个。结果如下图:图10、11该程序中,我加入了将初始化的各字符的编码输出的语句,可以看到各个字符的哈弗曼编码。图12这3行数字便是紧凑输出哈夫曼编码的结果。图13同时,不同的人使用本程序进行不同的哈夫曼编码时,由于前一位使用者初始化的数据后一位不一定同样适用,为了避免这种情况,因此当已经初始化后再

26、进行初始化时会出现提示是否重新初始化的信息提示,如上图所示。图14 在菜单界面选择T,打印处内存中的哈夫曼树各节点的值及其双亲节点和子节点。图15TEXTFILE.TXT文本文件,记录用户输入的需要进行编码的句子。图16CODEFILE.TXT文本文件,记录TEXTFILE.TXT文本文件中字符的哈弗曼编码。图17HFMTREE.TXT文本文件,记录输入的各字符及其权值7. 附录源程序文件名清单:TEXTFILE.TXT 记录待编码的句子CODEFILE.TXT 记录哈夫曼编码HFMTREE.TXT 记录字符个数、名称及权值源代码:#include #include #include #inc

27、lude#include#define NULL 0#define OK 1#define ERROR 0#define OVERFLOW -2#define MAX_NUM 32767#define MAX 60typedef char *HuffmanCode;/动态分配数组存储哈夫曼表码表typedef struct unsigned int weight; unsigned int parent,lchild,rchild;HTNode,*HuffmanTree;/动态分配数组存储哈夫曼树typedef struct HuffmanTree HT; char *c; int lengt

28、h; HuffmanCode HC;Huffman;/全局结构体变量,来存储字符与代码void Select(HuffmanTree HT,int end,int *s1,int *s2)/选择HT1.i-1中无双亲且权值最小的两个节点,其序号为s1,s2 int i; int min1=MAX_NUM; int min2; for (i=1;i=end;i+)/遍历查找权值最小的结点S1 if (HTi.parent=0&HTi.weightmin1) *s1=i; min1=HTi.weight; min2=MAX_NUM; for(i=1;iHTi.weight) *s2=i; min2

29、=HTi.weight; Huffman HuffmanCoding(Huffman Hfm) /存放n个字符的权值(均0),构造哈夫曼树HT,并求出n个字符的构造哈夫曼编码HC int i,n,m,s1,s2,start; int c,f; char *cd; n=Hfm.length; if(n=1) return Hfm; m=2*n-1; for(i=n+1;i=m;+i) /选择HT1.i-1中无双亲且权值最小的两个节点,其序号为s1,s2 Select(Hfm.HT,i-1,&s1,&s2); Hfm.HTs1.parent=i;/修改父亲位置 Hfm.HTs2.parent=i;

30、 Hfm.HTi.lchild=s1;/修改孩子位置 Hfm.HTi.rchild=s2; Hfm.HTi.weight=Hfm.HTs1.weight+Hfm.HTs2.weight;/父亲结点权值为左右孩子权值之和 /从叶子结点到根逆向求每个字符的哈夫曼编码 Hfm.HC=(HuffmanCode)malloc(n+1)*sizeof(char *);/分配n个字符编码的头指针向量 cd=(char *)malloc(n*sizeof(char);/分配求编码的工作空间 cdn-1=0;/编码结束符 for(i=1;i=n;+i)/逐个字符求哈夫曼编码 start=n-1;/编码结束符位置

31、 for(c=i,f=Hfm.HTi.parent;f!=0;c=f,f=Hfm.HTf.parent)/从叶子到根逆向求编码 if(c=Hfm.HTf.lchild) cd-start=0; else cd-start=1; Hfm.HCi=(char *)malloc(n-start)*sizeof(char); strcpy(Hfm.HCi,&cdstart);/从cd复制编码到Hfm.HC free(cd);/释放工作空间 return Hfm;Huffman InputHuffman(Huffman Hfm)/输入函数,控制用户输入字符和相应权值 int i,n; printf(nn

32、*Initialization*n); printf(The chars and weights will be saved in the file :hfmTree n); printf(Please input the number of the chars: ); scanf(%d,&n); if(n=1) printf(Only One Char!There Is No Need For Coding!);/若只有一个数值则无需编码 printf(n); printf(Please input the number of the chars: ); scanf(%d,&n); Hfm.

33、HT=(HuffmanTree)malloc(2*n)*sizeof(HTNode); Hfm.c=(char *)malloc(n+1)*sizeof(char); for(i=1;i=n;i+) printf(Please input the char: ); scanf(%s,&Hfm.ci); printf(Please input the weight of the char: ); scanf(%d,&Hfm.HTi.weight); Hfm.HTi.parent=0; Hfm.HTi.lchild=0; Hfm.HTi.rchild=0; for(;i=2*n-1;+i) Hfm

34、.HTi.weight=0; Hfm.HTi.parent=0; Hfm.HTi.lchild=0; Hfm.HTi.rchild=0; Hfm.length=n; return Hfm; Huffman InitHuffman(Huffman Hfm)/初始化哈夫曼数,要求用户输入字符和相应权值 int n,i,x; FILE *fp; fp=fopen(hfmTree,rt);/对文件hfmTree以读文本的形式打开 if(fp=NULL) Hfm=InputHuffman(Hfm);/调用InputHuffman函数,用户输入字符和相应权值存入哈夫曼数中 fp=fopen(hfmTree

35、,wt); fprintf(fp,%dn,Hfm.length); for(i=1;i=Hfm.length;i+) fprintf(fp,%c %d ,Hfm.ci,Hfm.HTi.weight); rewind(fp); else printf(The Huffmantree has already existed!nDo You Want To Make A New One?(YorN)nn);/询问是否重新初始化 scanf(%s,&x); if(x=Y) Hfm=InputHuffman(Hfm);/调用InputHuffman函数,用户输入字符和相应权值存入哈弗曼数中 fp=fop

36、en(hfmTree,w+); fprintf(fp,%dn,Hfm.length); for(i=1;i=Hfm.length;i+) fprintf(fp,%c %d ,Hfm.ci,Hfm.HTi.weight); rewind(fp); else fscanf(fp,%dn,&n); Hfm.c=(char *)malloc(n+1)*sizeof(char); Hfm.HT=(HuffmanTree)malloc(2*n)*sizeof(HTNode); for(i=1;i=n;i+) fscanf(fp,%s %d ,&Hfm.ci,&Hfm.HTi.weight);/将已经在文件

37、中的字符和其对应的权重输入到Hfm.ci和&Hfm.HTi.weight中 for(i=1;i=n;i+)/对每个节点初始化 Hfm.HTi.parent=0; Hfm.HTi.lchild=0; Hfm.HTi.rchild=0; for(;i=2*n-1;+i) Hfm.HTi.weight=0; Hfm.HTi.parent=0; Hfm.HTi.lchild=0; Hfm.HTi.rchild=0; Hfm.length=n; fclose(fp); Hfm=HuffmanCoding(Hfm); return Hfm; void Encoding(Huffman Hfm)/利用已建好的Huffman树(如不在内存,则从文件hfmTree中读入),对文件ToBeTran中的正文进行编码,然后将结果存入文件CodeFile中。 int i=0,j=0,n; char chMAX; FILE *fp,*fw; n=Hfm.length; printf(nn*Encoding

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1