欢迎来到冰点文库! | 帮助中心 分享价值,成长自我!
冰点文库
全部分类
  • 临时分类>
  • IT计算机>
  • 经管营销>
  • 医药卫生>
  • 自然科学>
  • 农林牧渔>
  • 人文社科>
  • 工程科技>
  • PPT模板>
  • 求职职场>
  • 解决方案>
  • 总结汇报>
  • ImageVerifierCode 换一换
    首页 冰点文库 > 资源分类 > DOCX文档下载
    分享到微信 分享到微博 分享到QQ空间

    哈夫曼编码编译器Word格式.docx

    • 资源ID:6610537       资源大小:110.98KB        全文页数:17页
    • 资源格式: DOCX        下载积分:3金币
    快捷下载 游客一键下载
    账号登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录
    二维码
    微信扫一扫登录
    下载资源需要3金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP,免费下载
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    哈夫曼编码编译器Word格式.docx

    1、可供三个选择(1) 编码(2) 译码(3) 退出执行(1)选择需要输入要编译的文件名需要输出编码保存文件名选择(1)执行完毕执行(2)选项输入要译码的编码文件名并输入保存的文件名选择(2)执行完毕执行(0)则退出该程序五、报告总结该程序主要采用了哈夫曼编码译码方法,对txt文件进行编译压缩,同时也能对编码后的文件进行解码,程序结构清晰,主干分两大部分:编码部分与解码部分,各部分通过调用函数合理清晰的实现其功能。程序中运用了一些文件的C语言基本操作,例如打开文件open()、保存文件save()函数,但程序上对文件类型的处理还有一些缺点,不能实现文件类型的自动保存,需要输入文件名字和类型。通过这

    2、次课程设计,不仅提高了自己的编程能力,还让我知道自己在编程方面的缺点,我以后会更加努力扩大自己的知识面提高自己的编程能力。#include stdlib.hstring.h#define M 10000 /定义字符串最大长度#define N 128 /定义叶子节点个数typedef struct node /定义哈夫曼树节点结构体int weight;struct node *LChild,*RChild,*Parent; /分别指向该节点的左孩子,右孩子,和双亲节点struct node *next; /指向建立的哈夫曼树的下一个节点HFMNode,*HFMTree;typedef str

    3、uct /定义哈夫曼编码的结构体char ch; /存储对应的字符char codeN+1; /存储对应字符的编码int start; /存储编码的起始位置CodeNode;int n; /存储真正叶子节点个数void clearscreen()system(cls);void Open(char s) /打开存放字符或编码的文件,将其存入字符串数组中char name10;FILE *fp;int i=0;printf(请输入要打开的文件名:gets(name); /要打开的文件名if(fp=fopen(name,rt)=NULL) printf(打开失败!n /若打开失败,则直接退出exi

    4、t(1); si+=fgetc(fp);while(si-1!=EOF) si+=fgetc(fp);si=0; /存取字符串结束fclose(fp);void Save(char s) /保存字符或编码到文件中请输入要保存的文件名:wt存储失败!fputs(s,fp);n保存成功,文件名为:%s。,name);n按回车键继续.getchar();void SearchStr(char s,char str,int count) /查找字符串中字符的个数和每个字符出现的次数int i,j,k=0;for(i=0;iN;i+) /初始化每个字符出现的次数counti=0;si;i+) for(j

    5、=0;jnext) if(p-weightParent=0) min=p-weight; *HT1=p;Parent=0&p!=*HT1) /令第二个最小的节点不等于第一个节点min=p- *HT2=p;void CreatHFMTree(HFMTree *HT,int count)/创建哈夫曼树int i;HFMTree p,HT1,HT2; /HT1,HT2分别存放权值最小和次小的节点的位置p=*HT=(HFMTree)malloc(sizeof(HFMNode);next=p-LChild=p-RChild=p-Parent=NULL; /初始化哈夫曼链表且有2n-1个节点for(i=1

    6、;2*n-1; p-next=(HFMTree)malloc(sizeof(HFMNode); p=p-next;for(i=0,p=*HT;n;i+) /将各个字符出现的次数作为权值 /存入哈夫曼链表的前n个单元中weight=counti;for(i=n;i+) /将后n-1个节点赋权值,建树SelectMin(*HT,i,&HT1,&HT2); /每次从前i个节点中选取权值最小的两个节点HT1-Parent=HT2-Parent=p;LChild=HT1;RChild=HT2;weight=HT1-weight+HT2- /将两个节点的权值相加存入最后一个节点中p=p- /p指向下一个没

    7、有存储权值的节点void HFMCode(HFMTree HT,CodeNode HC,char str)/从每个叶子节点开始,利用哈夫曼树对每个字符进行编码,最终建立一个哈夫曼表HFMTree q,p=HT;i+) /将字符存入哈夫曼编码结构体数组的字符单元中HCi.ch=stri; HCi.coden-1= /初始化编码的最后一位 HCi.start=n-1; for(q=p;q-Parent;q=q-Parent) /判断q所指向的节点,左孩子置0,右孩子置1 if(q=q-Parent-LChild) HCi.code-HCi.start=0 else HCi.code-HCi.sta

    8、rt=1 /判断下一个叶子节点void TotalCoding(char s,CodeNode HC,char code)/利用哈夫曼编码表对整个字符串进行编码int i,j;code0= /编码数组初始化i+) /将每个字符在哈夫曼编码表中对应的编码存入存放总编码的数组中for(j=0;j+) if(si=HCj.ch) strcpy(code+strlen(code),HCj.code+HCj.start);void DeCoding(char code,HFMTree HT,char str,char s)/对哈夫曼编码进行解码,放入字符串s中HFMTree root,p,q;for(r

    9、oot=HT;root-root=root-Parent); /用root指向哈夫曼树的根结点for(i=0,p=root;codei;i+) /从根结点开始按编码顺序访问树 if(codei=)LChild; else p=p-RChild;LChild=NULL&RChild=NULL) /到根节点时将该节点对应的字符输出for(j=0,q=HT;q!=p;next,j+); sk+=strj; p=root; /回溯到根结点 sk= /解码完毕,在字符串最后一个单元存入void Coding(char s,char str,char code,int count,HFMTree *HT,

    10、CodeNode HC)clearscreen();n打开存放字符串的文件.nnOpen(s); /打开源码文件SearchStr(s,str,count); /查找字符串中不同的字符及其出现的次数CreatHFMTree(HT,count); /用每个字符出现的次数作为叶子节点的权值建立哈夫曼树HFMCode(*HT,HC,str); /利用哈夫曼树对每个叶子节点进行编码,存入编码表中TotalCoding(s,HC,code); /利用编码表对字符串进行最终编码n读入的字符串为:puts(s);n最终的哈夫曼编码是:puts(code);n保存编码,Save(code); /保存最终的哈夫

    11、曼编码void TransCode(char code,char str,char ss,HFMTree *HT,CodeNode HC)n打开编码的文件.nnOpen(code); /打开编码文件DeCoding(code,*HT,str,ss); /将编码进行解码存入字符串数组ss中n得到的最终字符串为:puts(ss);n保存译码,Save(ss);int main()/主函数char sM,ssM; /定义字符串数组,s存放将要编码的字符串,ss存解码后的字符串char strN; /存放输入的字符串中n个不同的字符int countN; /存放n个不同字符对应的在原字符串中出现的次数

    12、char codeM; /存放最终编码完成后的编码char choice;HFMTree HT; /定义一个哈夫曼树的链表CodeNode HCN; /定义一个哈夫曼编码表的数组,存放每个字符对应的哈夫曼编码do clearscreen();nn *哈夫曼树*n * *n * 1.编码。 *n * 2.译码。 * 0.退出。 * 请输入相应操作的序号(0-2) *n *n scanf(%c,&choice); getchar(); switch(choice) case : Coding(s,str,code,count,&HT,HC);break; /对字符串进行编码case 2 TransCode(code,str,ss,& /对编码进行解码 default : 输入错误!请重新输入!while(choice!=


    注意事项

    本文(哈夫曼编码编译器Word格式.docx)为本站会员主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

    copyright@ 2008-2023 冰点文库 网站版权所有

    经营许可证编号:鄂ICP备19020893号-2


    收起
    展开