网站大量收购独家精品文档,联系QQ:2885784924

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

  1. 1、本文档共7页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
#include stdio.h /*I/O函数*/ #includestdlib.h /*其他库函数声明*/ int num;/*记录结点数*/ int codenum=0;/*已经获得的编码个数*/ char filename[20]=; /*存储文件名*/ typedef struct /*哈夫曼结点存储结构*/ { char ch; /*结点字符*/ int w; /*结点权值*/ int lchild,rchild; /*左右孩子的数组下标*/ }HafuNode,*HafuTree; HafuTree ht;/*声明一个指向树结点到指针*/ typedef struct { char ch; /*叶子结点字符*/ char codestr[20]; /*字符编码*/ }HafuCode; HafuCode code[27];/*用于存放对应字符到哈夫曼编码*/ void InitHafuArry() { /*导入文件计算权值,生成只含有叶子结点的HafuNode数组*/ int j,i,k; HafuNode tmpht; FILE *fp; /*定义一指向打开文件的指针*/ char ch;/*用于存储一个字母*/ char location[30]=D:\\; ht=(HafuTree)malloc(53*sizeof(HafuNode)); /*为哈夫曼数分配内存空间*/ if(ht==NULL) return ; for(i=0;i53;i++) /*初始化所以的数据单元,每个单元自成一棵树*/ { ht[i].w=0; /*权值初始化为0*/ ht[i].lchild=ht[i].rchild=-1; /*左右子为空*/ } num=0; printf(File name:); scanf(%s,filename); strcat(location,filename); fp=fopen(location,r); if(!fp) /*返回1时即存在文件*/ { printf(Open Error); return; } while(!feof(fp))/*没到结尾时返回0*/ { ch=fgetc(fp); if(ch== ||ch=zch=a||ch=Zch=A) { printf(%c,ch); if(ch== ) ch=#; for(j=0;jnum;j++) { if(ht[j].ch==ch) { break; } } if(j==num) /*找到新字符*/ { ht[num].ch=ch; /*将新字符存入并将权值加1*/ ht[num].w++; num++; } else { ht[j].w++; /*将已有字符权值加1*/ } } }fclose(fp); printf(\n); for(i=0;inum;i++) /*对叶子结点按权值进行升序排序*/ { k=i; for(j=i+1;jnum;j++) { if(ht[j].wht[k].w)/*如果后面发现权值比i小的则将其下标记录下来,循环完之后找到最小的*/ k=j; } if(k!=i) /*如果权值最小的不是第i个元素则交换位置,将小的放到前面*/ { tmpht=ht[i]; ht[i]=ht[k]; ht[k]=tmpht; } } } int CreateHafuman(HafuTree ht) { /*在数组ht中生成哈夫曼数,返回根节点下标*/ int i,k,j,root; HafuNode hfnode; codenum=0; for(i=0;inum-1;i++) { /*需生成num-1个结点*/ k=2*i+1; /*每次取最前面两个结点,其权值必定最小*/ hfnode.w=ht[k].w+ht[k-1].w; hfnode.lchild=k-1; hfnode.rchild=k; for(j

文档评论(0)

wangjie111 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档