欢迎来到天天文库
浏览记录
ID:49706538
大小:112.50 KB
页数:13页
时间:2020-03-03
《哈夫曼编码编译器.doc》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、一、课题:哈夫曼编码编译器设计一个哈夫曼编码/译码系统,对一个文本文件中的字符进行哈夫曼编码,生成编码文件(压缩文件,后缀名.cod);反过来,可将一个压缩文件译码还原为一个文本文件(.txt)。二、功能(1)输入一个待压缩的英文文本文件,统计文本文件中各字符的个数作为权值,生成哈夫曼树;(2)将文本文件利用哈夫曼树进行编码,生成压缩文件(后缀名cod)(3)输入一个待解压的压缩文件名称,并利用相应的哈夫曼树将编码序列译码。三、程序结构程序流程图执行程序选择(0)退出选择(1)编码选择(2)译码输入要编码文件输入要
2、译码文件名编码译码保存编码后的文件保存译码后的文件文字说明Main函数:Coding()编码函数TransCode()译码函数Coding()编码函数:clearscreen()清屏函数Open()打开源码文件SearchStr()查找字符串中不同的字符及其出现的次数CreatHFMTree()用每个字符出现的次数作为叶子节点的权值建立哈夫曼树HFMCode()利用哈夫曼树对每个叶子节点进行编码,存入编码表中TotalCoding()利用编码表对字符串进行最终编码Save()保存最终的哈夫曼编码TransCode(
3、)译码函数:clearscreen()清屏函数Open()打开编码文件DeCoding();//将编码进行解码存入字符串数组中Save();//保存译码后的字符串四、算法说明1.执行界面可供三个选择(1)编码(2)译码(3)退出执行(1)选择需要输入要编译的文件名需要输出编码保存文件名选择(1)执行完毕执行(2)选项输入要译码的编码文件名并输入保存的文件名选择(2)执行完毕执行(0)则退出该程序五、报告总结该程序主要采用了哈夫曼编码译码方法,对txt文件进行编译压缩,同时也能对编码后的文件进行解码,程序结构清晰,主
4、干分两大部分:编码部分与解码部分,各部分通过调用函数合理清晰的实现其功能。程序中运用了一些文件的C语言基本操作,例如打开文件open()、保存文件save()函数,但程序上对文件类型的处理还有一些缺点,不能实现文件类型的自动保存,需要输入文件名字和类型。通过这次课程设计,不仅提高了自己的编程能力,还让我知道自己在编程方面的缺点,我以后会更加努力扩大自己的知识面提高自己的编程能力。#include#include#include#defineM10000//定
5、义字符串最大长度#defineN128//定义叶子节点个数typedefstructnode//定义哈夫曼树节点结构体{intweight;structnode*LChild,*RChild,*Parent;//分别指向该节点的左孩子,右孩子,和双亲节点structnode*next;//指向建立的哈夫曼树的下一个节点}HFMNode,*HFMTree;typedefstruct//定义哈夫曼编码的结构体{charch;//存储对应的字符charcode[N+1];//存储对应字符的编码intstart;//存储编
6、码的起始位置}CodeNode;intn;//存储真正叶子节点个数voidclearscreen(){system("cls");}voidOpen(chars[])//打开存放字符或编码的文件,将其存入字符串数组中{charname[10];FILE*fp;inti=0;printf("请输入要打开的文件名:");gets(name);//要打开的文件名if((fp=fopen(name,"rt"))==NULL){printf("打开失败!");//若打开失败,则直接退出exit(1);}s[i++]=fg
7、etc(fp);while(s[i-1]!=EOF)s[i++]=fgetc(fp);s[i]=' ';//存取字符串结束fclose(fp);}voidSave(chars[])//保存字符或编码到文件中{charname[10];FILE*fp;printf("请输入要保存的文件名:");gets(name);if((fp=fopen(name,"wt"))==NULL){printf("存储失败!");exit(1);}fputs(s,fp);printf("保存成功,文件名为:%s。",name)
8、;printf("按回车键继续...");getchar();fclose(fp);}voidSearchStr(chars[],charstr[],intcount[]){//查找字符串中字符的个数和每个字符出现的次数inti,j,k=0;for(i=0;i
此文档下载收益归作者所有