哈夫曼编码

哈夫曼编码

ID:68681780

大小:68.00 KB

页数:20页

时间:2021-10-19

哈夫曼编码_第1页
哈夫曼编码_第2页
哈夫曼编码_第3页
哈夫曼编码_第4页
哈夫曼编码_第5页
哈夫曼编码_第6页
哈夫曼编码_第7页
哈夫曼编码_第8页
哈夫曼编码_第9页
哈夫曼编码_第10页
资源描述:

《哈夫曼编码》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、#include"stdio.h"//输入、输出函数#include"stdlib.h"//定义杂项函数及内存分配函数#include"string.h"#defineM100#defineN20typedefcharElemType;intn=0,m;//叶子结点个数,编码总长charcode[M];charcode2[M];charresult[M];typedefstruct//哈夫曼树的结点类型{chardata;doubleweight;intparent;//双亲节点intlchild;//左孩子结点intrchild;

2、//右孩子结点}HTNode;typedefstruct//每个哈夫曼编码的类型{intcd[N];intstart;}HCode;typedefstruct//串的类型定义{ElemTypedata[M];intlen;}sqstring;intmenu()//菜单系选择函数{intc;do{printf("********************************************************");printf("tt****哈夫曼树的应用****");printf("tt1.输入字符统计

3、后输出");printf("tt2.构造哈夫曼树并输出");printf("tt3.进行哈夫曼编码并输出");printf("tt4.保存编码到文件");printf("tt5.从文件读出编码后译码输出");printf("tt0.退出程序");printf("tt请选择(0-6):");printf("********************************************************");scanf("%d",&c);}while(c<0

4、

5、c>

6、6);returnc;/*返回选择*/}voidshuru(sqstring&s,charcstr[])//输入字符串并统计后输出{intp;inti=0,k=0;printf("请输入一串字符:");getchar();gets(cstr);for(i;cstr[i]!='';i++)//只把a-z或A-Z赋给串s{if((cstr[i]>='a'&&cstr[i]<='z')

7、

8、(cstr[i]>='A'&&cstr[i]<='Z')){s.data[k]=cstr[i];k++;}}s.len=k;if(s.len>0){

9、printf("输入的字符串为:");for(p=0;p='a'&&s.data[j]<='z')a[s.data[j]-'a']++;if(s.dat

10、a[j]>='A'&&s.data[j]<='Z')a[s.data[j]-'A']++;}for(intk=0;k<26;k++)//计算叶子结点的个数{if(a[k]!=0)n++;}j=0;for(k=0;k<26;k++)//计算频率,把字符送入ht{if(a[k]!=0){ht[j].data=(char)(k+97);ht[j].weight=1.0*a[k]/s.len;j++;}}printf("字符种类为:%d",n);printf("");}voidCreateHT(HTNodeht[],intn)//构

11、造哈夫曼树后输出{inti,k,lnode,rnode;doublemin1,min2;for(i=0;i<2*n-1;i++)ht[i].parent=ht[i].lchild=ht[i].rchild=-1;for(i=n;i<2*n-1;i++)//构造哈夫曼树{min1=min2=32767;lnode=rnode=-1;//最小权值的两个位置for(k=0;k<=i-1;k++)if(ht[k].parent==-1)//只在尚未构造二叉树的结点中查找{if(ht[k].weight

12、de=lnode;min1=ht[k].weight;lnode=k;}elseif(ht[k].weight

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。