哈夫曼编码与解码C语言.doc

哈夫曼编码与解码C语言.doc

ID:57415370

大小:27.50 KB

页数:7页

时间:2020-08-16

哈夫曼编码与解码C语言.doc_第1页
哈夫曼编码与解码C语言.doc_第2页
哈夫曼编码与解码C语言.doc_第3页
哈夫曼编码与解码C语言.doc_第4页
哈夫曼编码与解码C语言.doc_第5页
资源描述:

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

1、#include"stdio.h"/*I/O函数*/#include"stdlib.h"/*其他库函数声明*/intnum;/*记录结点数*/intcodenum=0;/*已经获得的编码个数*/charfilename[20]="";/*存储文件名*/typedefstruct/*哈夫曼结点存储结构*/{charch;/*结点字符*/intw;/*结点权值*/intlchild,rchild;/*左右孩子的数组下标*/}HafuNode,*HafuTree;HafuTreeht;/*声明一个指向树结点到指针*/

2、typedefstruct{charch;/*叶子结点字符*/charcodestr[20];/*字符编码*/}HafuCode;HafuCodecode[27];/*用于存放对应字符到哈夫曼编码*/voidInitHafuArry(){/*导入文件计算权值,生成只含有叶子结点的HafuNode数组*/intj,i,k;HafuNodetmpht;FILE*fp;/*定义一指向打开文件的指针*/charch;/*用于存储一个字母*/charlocation[30]="D:\";ht=(HafuTree)mal

3、loc(53*sizeof(HafuNode));/*为哈夫曼数分配内存空间*/if(ht==NULL)return;for(i=0;i<53;i++)/*初始化所以的数据单元,每个单元自成一棵树*/{ht[i].w=0;/*权值初始化为0*/ht[i].lchild=ht[i].rchild=-1;/*左右子为空*/}num=0;printf("Filename:");scanf("%s",filename);strcat(location,filename);fp=fopen(location,"r");i

4、f(!fp)/*返回1时即存在文件*/{printf("OpenError");return;}while(!feof(fp))/*没到结尾时返回0*/{ch=fgetc(fp);if(ch==''

5、

6、ch<='z'&&ch>='a'

7、

8、ch<='Z'&&ch>='A'){printf("%c",ch);if(ch=='')ch='#';for(j=0;j

9、权值加1*/ht[num].w++;num++;}else{ht[j].w++;/*将已有字符权值加1*/}}}fclose(fp);printf("");for(i=0;i

10、]=ht[k];ht[k]=tmpht;}}}intCreateHafuman(HafuTreeht){/*在数组ht中生成哈夫曼数,返回根节点下标*/inti,k,j,root;HafuNodehfnode;codenum=0;for(i=0;ik;

11、j--)/*将新结点插入有序数组中*/{if(ht[j].w>hfnode.w){ht[j+1]=ht[j];}elsebreak;}ht[j]=hfnode;root=j;/*一直跟随新生成的结点,最后新生成的结点为根结点*/}returnroot;}voidGetHafuCode(HafuTreeht,introot,char*codestr){/*ht是哈夫曼树,root是根结点下标,codestr是来暂时存放叶子结点编码的,一开始为空*/FILE*out;intlen,i;FILE*fp;/*定义一指向

12、打开文件的指针*/charch;/*用于存储一个字母*/charlocation[30]="D:\";if(ht[root].lchild==-1){/*遇到递归终点是叶子结点记录叶子结点的哈夫曼编码*/code[codenum].ch=ht[root].ch;strcpy(code[codenum].codestr,codestr);codenum++;}else/*不是终点则继续

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

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

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