哈夫曼编码编译器.docVIP

  1. 1、本文档共13页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
. . 课题:哈夫曼编码编译器 设计一个哈夫曼编码/译码系统,对一个文本文件中的字符进行哈夫曼编码,生成编码文件 (压缩文件,后缀名.cod);反过来,可将一个压缩文件译码还原为一个文本文件(.txt)。 功能 (1)输入一个待压缩的英文文本文件,统计文本文件中各字符的个数作为权值,生成哈夫曼树; (2)将文本文件利用哈夫曼树进行编码,生成压缩文件(后缀名cod) (3)输入一个待解压的压缩文件名称,并利用相应的哈夫曼树将编码序列译码。 三、程序结构 程序流程图 执行程序 执行程序 选择(0)退出选择(1)编码 选择(0)退出 选择(1)编码 选择(2)译码 选择(2)译码 输入要编码文件 输入要编码文件 输入要译码文件名 输入要译码文件名 编码 编码 译码 译码 保存编码后的文件 保存编码后的文件 保存译码后的文件 保存译码后的文件 文字说明 Main函数:Coding()编码函数 TransCode()译码函数 Coding()编码函数: clearscreen()清屏函数 Open()打开源码文件 SearchStr()查找字符串中不同的字符及其出现的次数 CreatHFMTree()用每个字符出现的次数作为叶子节点的权值建立哈夫曼树 HFMCode()利用哈夫曼树对每个叶子节点进行编码,存入编码表中 TotalCoding()利用编码表对字符串进行最终编码 Save()保存最终的哈夫曼编码 TransCode()译码函数: clearscreen()清屏函数 Open()打开编码文件 DeCoding(); //将编码进行解码存入字符串数组中 Save(); //保存译码后的字符串 四、 算法说明 执行界面 可供三个选择 编码 译码 退出 执行(1)选择 需要输入要编译的文件名 需要输出编码保存文件名 选择(1)执行完毕 执行(2)选项 输入要译码的编码文件名并输入保存的文件名 选择(2)执行完毕 执行(0)则退出该程序 五、报告总结 该程序主要采用了哈夫曼编码译码方法,对txt文件进行编译压缩,同时也能对编码后的文件进行解码,程序结构清晰,主干分两大部分:编码部分与解码部分,各部分通过调用函数合理清晰的实现其功能。程序中运用了一些文件的C语言基本操作,例如打开文件open()、保存文件save()函数,但程序上对文件类型的处理还有一些缺点,不能实现文件类型的自动保存,需要输入文件名字和类型。通过这次课程设计,不仅提高了自己的编程能力,还让我知道自己在编程方面的缺点,我以后会更加努力扩大自己的知识面提高自己的编程能力。 #include stdio.h #include stdlib.h #include string.h #define M 10000 //定义字符串最大长度 #define N 128 //定义叶子节点个数 typedef struct node //定义哈夫曼树节点结构体 { int weight; struct node *LChild,*RChild,*Parent; //分别指向该节点的左孩子,右孩子,和双亲节点 struct node *next; //指向建立的哈夫曼树的下一个节点 }HFMNode,*HFMTree; typedef struct //定义哈夫曼编码的结构体 { char ch; //存储对应的字符 char code[N+1]; //存储对应字符的编码 int start; //存储编码的起始位置 }CodeNode; int n; //存储真正叶子节点个数 void clearscreen() { system(cls); } void Open(char s[]) //打开存放字符或编码的文件,将其存入字符串数组中 { char name[10]; FILE *fp; int i=0; printf(请输入要打开的文件名:); gets(name); //要打开的文件名 if((fp=fopen(name,rt))==NULL) { printf(打开失败!\n); //若打开失败,则直接退出 exit(1); } s[i++]=fgetc(fp); while(s[i-1]!=EOF) s[i++]=fgetc(fp); s[i]=\0; //存取字符串结束 fclose(fp); } void Save(char s[]) //保存字符或编码到文件中 { char name[10]; FILE *fp; printf(请输入要保存的文件名:); gets(name); if((fp=fopen(name,wt))==NULL) { printf(存储失败!); exit(1); } fputs(s,fp); printf(\n保存成功,

文档评论(0)

ygxt89 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档