


版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、#include<iostream>#include"string.h" using namespace std;#define MAX 100#define N 26typedef struct/ 哈夫曼树的结点unsigned int weight;unsigned int parent,lchild,rchild;HTNode,*Huffmantree;typedef struct/ 字符存储结点信息char data; /待编码的字符int weight; /字符的权值char codeN; /字符的编码 HTCode;/ 初始化结点信息void Ini
2、tCode(HTCode *Hr,int &n)cout<<" 请输入字符编码的个数 n: " cin>>n;cout<<" 请输入待编码字符以及相应的权值: "<<endl;for(int i = 1;i <= n;i+)cin>>(Hr+i)->data>>(Hr+i)->weight;void Select(Huffmantree &HT,int end,int *s1,int *s2)/ 在 0end 之间 ,找出最小和次小的两个结点序号 ,
3、返回 S1,S2int i;int min1 = MAX;int min2;for (i = 1;i <= end;i+)/ 找最小的结点序号if (HT+i)->parent = 0 && (HT+i)->weight<=min1)*s1 = i;min1 = (HT+i)->weight;min2 = MAX;for(i = 1;i <= end;i+)/ 找次小结点的序号if (HT+i)->parent = 0 && *s1 != i && min2 >= (HT+i)->weight
4、)*s2 = i;min2 = (HT+i)->weight;/ 初始化哈夫曼树 , 并把信息存入 Hrvoid InitHfmtree(Huffmantree &Ht,HTCode Hr,int &n)if(n <= 1) return;int m,start,i,j,f;int s1,s2;m = 2*n-1; /n 个顶点有 m 个节点Ht = (Huffmantree)malloc(m+1)*sizeof(HTNode);Huffmantree P;P = Ht+1;for(i = 1;i <= m;i+,P+) /0 号单元没用if(i <=
5、n) P->weight = Hri.weight;else P->weight = 0;P->lchild = 0;P->rchild = 0;P->parent = 0;for(i = n+1;i <= m;i+) / 建赫夫曼树Select(Ht,i-1,&s1,&s2);/ 寻找匹配双亲节点(Ht+s1)->parent = i;(Ht+s2)->parent = i;(Ht+i)->lchild = s1;(Ht+i)->rchild = s2;(Ht+i)->weight = (Ht+s1)->
6、weight + (Ht+s2)->weight;char *code;code = (char *)malloc( n*sizeof(char);coden-1 = '0'for(i = 1;i <= n;i+)/ 编码存入 Hr->codestart = n-1;for(j = i,f = Htj.parent;f != 0;j = f,f = Htf.parent)if(Htf.lchild = j)code-start = '0'elsecode-start = '1'strcpy(Hri.code,&codes
7、tart);cout<<" 字符编码初始化完成! "<<endl;void Encoding(HTCode *Hr,int n)/ 编码int i,j;char *encode;encode = (char *)malloc( n*sizeof(char);cout<<" 请选择你想要编码的字符: "<<endl;cin>>encode;for(i = 0;encodei!='0'i+)j = 1;while(encodei != Hrj.data) j+;if(j>n)&
8、quot;<<endl;cout<<" 您输入编码 "<<encodei<<" 错误!elsecout<<Hrj.data<<" 的编码是 "<<Hrj.code<<endl;/cout<<" 编码已经结束! "<<endl;/cout<<Hrj.data<<" 的编码是 "<<Hrj.code<<endl;cout<<&quo
9、t; 编码已经结束! "<<endl;void Decoding(HTCode *Hr,int n)/ 译码int j=1;char *decode;decode = (char *)malloc( n*sizeof(char);cout<<" 请输入你想要译码的字符串: "<<endl;cin>>decode;for(j=1;j<=n;j+)if(strcmp(decode,Hrj.code) != 0);else break;if(j>n)cout<<" 您输入译码的字符串错误!
10、 "<<endl;elsecout<<Hrj.code<<" 的译码是 "<<Hrj.data<<endl;cout<<" 译码已经结束! "<<endl;void TreePrint(Huffmantree &HT,HTCode Hr,int n)/ 打印各个结点信息int i,j;cout<<"nn*打印哈夫曼树*n"<<endl;cout<<" 结点 weight parent lc
11、hild rchild"<<endl;for (j=1; j<=n; j+) printf("n%4d(%c)%5d%8d%8d%8dn",j,Hrj.data,HTj.weight,HTj.parent,HTj.lc hild,HTj.rchild);for (i=n+1; i <= 2*n-1; i+) printf("n%4d%8d%8d%8d%8dn",i,HTi.weight,HTi.parent,HTj.lchild,HTi.rchi ld);void main()Huffmantree Ht;HTCode
12、HrN;cout<<"t* 欢迎使用赫夫曼编译码 *"<<endl;int n = 0;char cmd;do印赫夫曼树cout<<"* 初始化赫夫曼树( I ) 编码( E) 译码( T) 离开( Q) *"<<endl;cin>>cmd;switch(cmd)case 'I':InitCode(Hr,n);InitHfmtree(Ht,Hr,n);break;case 'E':Encoding(Hr,n);break;case 'D':Decoding(Hr,n);bre
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 项目签约协议书范本
- 草场租赁与生态补偿机制协议
- 企业车辆事故责任免除与赔偿协议
- 青岛商铺租赁协议书范本
- 绿色节能彩钢活动房安装施工安全保证合同
- 高端公寓租赁管理合同范本
- 中外合资餐饮品牌开发与推广协议
- 草籽种植补贴与购销保障合同
- 桥梁模态分析试验专题报告
- 餐饮部管理运转手册
- 2025年陕西省中考数学真题试卷及答案解析
- 呼吸机的维护与保养标准流程
- 2025年北方华创招聘笔试参考题库含答案解析
- 2025年全国新高考I卷高考全国一卷真题英语试卷(真题+答案)
- 公共组织绩效评估-形考任务三(占10%)-国开(ZJ)-参考资料
- 2025年广东高中学业水平合格性考试化学试卷试题(含答案解析)
- JT∕T 795-2023 事故汽车修复技术规范
- 趣识古文字智慧树知到期末考试答案章节答案2024年吉林师范大学
- 《平行四边形》PPT课件共(25张PPT)
- 北京市西城区2021-2022学年三年级下册数学期末试卷(含答案)
- 天津城建大学概率论试卷试题
评论
0/150
提交评论