哈夫曼树源代码.docx

  1. 1、本文档共4页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
#includeiostream #includestring #includefstream usingnamespacestd; #defineMax200eight=w[i];HT[i].parent=0; HT[i].lchild=0;HT[i].rchild=0; } for(i=n+1;i=m;++i)eight=0;HT[i].parent=0; HT[i].lchild=0;HT[i].rchild=0; } for(i=n+1;i=m;++i)i-1]选择parent为0且weight最小的两个结点,其序号分别为S1和S2 min1=min2=INT; for(j=1;ji;j++) if(HT[j].parent==0(HT[j].weightmin1)) {min1=HT[j].weight;s1=j;}for(j=1;ji;j++)if(HT[j].parent==0(HT[j].weightmin2)j!=s1) {min2=HT[j].weight;s2=j;} 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; ch[i]=;child=s1;HT[i].rchild=s2; cd[n-1]=\0;arent;f!=0;c=f,f=HT[f].parent)child==c) cd[--start]=0; else cd[--start]=1; HC[i]=newchar[n-start];果需要取消\n的影响,能够用getchar( );来消除, ch[i]=getchar( );eightHT[i].parent HT[i].lchildHT[i].rchildendl;for(i=1;i=n;i++)eightHT[i].parentHT[i].lchildHT[i].rchild; (c); } for(i=1;i=n;i++) { (ch[i]); finHC[i]; (c); } } ( ); } voidEncoding(HuffmanCodeHC,intn)child; elsej=HT[j].rchild; if(HT[j].lchild==0) {foutch[j];j=m;} i++; } foutendl; } voidPrint(HuffmanTreeHT,intn)arent==0)eight; for(l=m;l0;l--) for(i=1;i=2*n-1;i++) if(HT[i].weight==l) { for(j=0;jk;j++) {cout  ;fout  ;}eightendl;foutHT[i].weightendl;  p++;}//p  表示每层的非叶子结点数 q++;//q  记录每层的结点数目 if(q==r){k++;r=2*p;p=0;q=0;}//  如果该层的结点满了,就到下一层,即  k+1 } } intmain( ) { HuffmanTreeHT; HuffmanCodeHC; charc; intn; HT=newHTNode[Max]; HC=newchar*[Max]; for(inti=1;i=Max;i++)//初始化 HC[i]=newchar[20]; cout-----------------------欢迎进入哈夫曼的编/译码系统----------------------endl; cout菜单如下:endl; coutI、初始化endl; coutE、编码endl; coutD、译码endl; coutP、打印代码文件endl; coutT、打印哈夫曼树endl; coutQ、退出endl; while(c!=Q) { cout请选择操作:; cinc; switch(c) { caseI:Initialization(HT,HC,n); cout哈夫曼树成功存入文件hfmTree中!endl; break; caseE:Encoding(HC,n); cout对文件ToBeTran的编码结果成功存入文件CodeFile中!endl; break; caseD:Decoding(HT,n); cout对文件CodeFile的译码结果成功存入文件TextFile中!endl; break; caseP:Print(HT,n); cout毎行50个代码形式的编码结果成功写入文件CodePrin中!endl; break; caseT:cout哈夫曼树的凹入表示法如下:endl; PrintTree(HT,n); cout哈夫曼树以凹入

文档评论(0)

132****0439 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档