




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、哈夫曼编码译码哈夫曼编码译码 .txt 我不奢望什么,只希望你以后的女人一个不如一个。真怀 念小时候啊,天热的时候我也可以像男人一样光膀子 #i nclude#include#include#define MAX 50typedef structint weight;int parent;int Lchild;int Rchild;char ch;HTNode,*HuffmanTree;typedef structchar letter;int num;Letter;typedef char *HuffmanCode;void Select(HuffmanTree *ht,int n,int
2、*s1,int *s2) /寻找最小和次小权值int i,m1=32767,m2=32767; for(i=1;i=n;i+)if(*ht)i.weightm1&(*ht)i.parent=0)m2=m1;*s2=*s1;*s1=i;m1=(*ht)i.weight;else if(*ht)i.weightm2&(*ht)i.parent=0)*s2=i;m2=(*ht)i.weight;建立哈夫曼树int CreatHT(HuffmanTree *ht,Letter word,int n) / int i,m,s1,s2;m=2*n-1;*ht=(HuffmanTree)malloc(m+1
3、)*sizeof(HTNode);for(i=1;i=n;i+)if(wordi-1.num!=0)(*ht)i.weight=wordi-1.num;(*ht)i.parent=0;(*ht)i.Lchild=0;(*ht)i.Rchild=0;(*ht)i.ch=wordi-1.letter; / 叶子结点初始化for(i=n+1;i=m;i+)(*ht)i.weight=0;(*ht)i.parent=0;(*ht)i.Lchild=0;(*ht)i.Rchild=0;(*ht)i.ch=#; / 非叶子结点初始化for(i=n+1;i=m;i+)Select(ht,i-1,&s1,&s
4、2);(*ht)s1.parent=i;(*ht)s2.parent=i;(*ht)i.Lchild=s1;(*ht)i.Rchild=s2;(*ht)i.weight=(*ht)s1.weight+(*ht)s2.weight; for(i=1;i=m;i+) printf(nweight:%dt,(*ht)i.weight); printf(parent:%dt,(*ht)i.parent); printf(Lchild:%dt,(*ht)i.Lchild); printf(Rchild:%dt,(*ht)i.Rchild);printf(nn 哈夫曼树建立成功 , 按任意键返回 !);
5、return m;输入int Scanf(Letter word,int n,char sentence,int *len) / 并统计权值int i,j,k;fflush(stdin);printf( 请输入需要编码语句的长度 :); scanf(%d,len);fflush(stdin);printf(n 请输入需要编码的语句 :);gets(sentence);for(i=0;i*len;i+)wordi.num=0;word0.letter=sentence0; word0.num=1; for(i=1,k=1;i*len;i+) for(j=0;j*len;j+) if(senten
6、cei=wordj.letter) wordj.num+; break;else if(j=*len-1)wordk.letter=sentencei;wordk.num+;k+;break;for(i=0;i*len;i+)if(wordi.num!=0)n+;for(i=0;in;i+)if(wordi.num!=0)printf(n结点 ct 频度:dn,wordi.letter,wordi.num);printf(n输入完毕 !n);return n;void Encode(HuffmanTree ht,HuffmanCode *hc,int n,char sentence,int l
7、en)/ 哈夫曼编码int i,j,k,start;int p;char *h;*hc=(HuffmanCode)malloc(n+1)*sizeof(char*);h=(char *)malloc(n*sizeof(char);hn-1=0;for(i=1;i=n;i+)start=n-1;p=hti.parent;j=i;while(p!=0)-start;if(htp.Lchild=j)hstart=0;elsehstart=1;j=p;p=htp.parent;(*hc)i=(char *)malloc(n-start)*sizeof(char); strcpy(*hc)i,&hsta
8、rt);for(i=0;ilen;i+)for(j=1,k=1;j=len&k=n;j+,k+)if(sentencei=htj.ch)printf(%s,(*hc)k);free(h);void Decode(HuffmanTree ht,HuffmanCode hc,char code,int cnt,int m) / 哈夫曼译码int i,p;p=m;for(i=0;icnt;i+)if(htp.Lchild!=0&htp.Rchild!=0)if(codei=0)p=htp.Lchild;elsep=htp.Rchild;if(htp.Lchild=0)printf(%c,htp.ch
9、);p=m;保存输入文字void Save_sentence(char sentence,int len) /int i;char filename40;FILE *fp;printf(n 请输入要保存的文件名 :); scanf(%s,filename);fp=fopen(filename,wt);if(fp=NULL)printf(n 写文件出错 , 按任意键退出 !); exit(1); fprintf(fp,输入的字符为 :);for(i=0;ilen;i+)fprintf(fp,%c,sentencei);printf(n 文件已成功保存 , 按任意键返回 !); getchar()
10、;getchar(); fclose(fp);void Save_code(HuffmanTree ht,HuffmanCode hc,int n,char sentence,int len)/ 保存哈夫曼编码int i,j,k;char filename40;FILE *fp;printf(nn 请输入要保存的文件名 :); scanf(%s,filename);fp=fopen(filename,wt); if(fp=NULL)printf( 写文件出错 , 按任意键退出 !); exit(1); for(i=1,j=1;i=n&j=len;i+,j+) fprintf(fp,结点 %ct
11、tt 码值 :%sn,htj.ch,hci);for(i=0;ilen;i+) for(j=1,k=1;j=len&k=n;j+,k+) if(sentencei=htj.ch) fprintf(fp,%s,hck);printf(n 哈夫曼编码保存成功 , 按任意键返回 !); fclose(fp);int Read(char code) / 读取哈夫曼编码 int i=0,cnt=0;char filename40;FILE *fp;printf(n 请输入要打开的文件名 :); scanf(%s,filename);fp=fopen(filename,rt);if(fp=NULL)pri
12、ntf( 读文件出错 , 按任意键退出 !);exit(1);while(!feof(fp) / 文件未结束fscanf(fp,%c,&codei);if(codei=#)break;elsei+;cnt+;for(i=0;icnt;i+)printf(%c,codei);printf(n);fclose(fp);return cnt;void main()int n=0,m=0,len=0,cnt,choice;char code50;char sentenceMAX+1;HuffmanCode hc;HuffmanTree ht;Letter wordMAX;while(choice)pr
13、intf(nnnt *欢迎使用哈夫曼编码译码器*printf(ttt1.输入需要编码的语句 nn);printf(ttt2.建立哈夫曼树 nn);printf(ttt3.进行哈夫曼编码 nn);printf(ttt4.进行哈夫曼译码 nn);printf(ttt0.退出编码译码器 nn);printf(nn请输入 0-4, 选择要执行的操作 :);nnn);scanf(%d,&choice);system(CLS); switch(choice)case 1: / 输入n=Scanf(word,n,sentence,&len);Save_sentence(sentence,len); break;case 2: / 建立哈夫曼树m=CreatHT(&ht,word,n);getchar();getchar();break;case 3: / 哈夫曼编码Encode(
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 洗手间装修出租合同范本
- 黑龙江省第三方协议合同
- 游泳机构合作合同协议书
- 粘土配方设备转让协议书
- 肋骨骨折工伤补偿协议书
- 汽车保险拍卖协议书模板
- 生意中介服务费合同范本
- 门面出租电子档合同范本
- 股份回购如何写合同协议
- 泰州学院食堂承包协议书
- GB/T 23936-2018工业氟硅酸钠
- GB/T 1874-1995磷矿石和磷精矿中酸不溶物含量的测定重量法
- GB 30980-2014海洋倾倒物质评价规范疏浚物
- GA/T 1393-2017信息安全技术主机安全加固系统安全技术要求
- 尼可地尔临床应用优势课件
- 超星尔雅《诗经》导读检测题答案
- 冷却系统橡胶软管设计基础规范
- 地源热泵埋管冬夏季换热平衡计算
- 湖北省职称评审专业目录表(工程系列)
- 中考《红星照耀中国》各篇章练习题及答案(1-12)
- 华中师范大学辅导员队伍建设实施办法
评论
0/150
提交评论