版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、华北水利水电大学 数据结构 实验报告实验三 树的应用一、 实验题目:树的应用哈夫曼编码二、 实验内容:利用哈夫曼编码进行通信可以大大提高信道的利用率,缩短信息传输的时间,降低传输成本。根据哈夫曼编码的原理,编写一个程序,在用户输入结点权值的基础上求哈夫曼编码。从键盘输入若干字符及每个字符出现的频率,将字符出现的频率作为结点的权值,建立哈夫曼树,求出各字符的哈夫曼编码。要求:1 输出存放哈夫曼树的数组HT的初态和终态;2 输出每个字符的哈夫曼编码;3 输入由上述若干字符组成的字符串,对电文进行编码并输出;三、 程序源代码:#include #include #include #define N
2、8#define M 4typedef structchar data;char *code;unsigned int weight;unsigned int parent,lchild,rchild;HTNode,*HuffmanTree; /动态分配数组存储赫夫曼树typedef char *HuffmanCode; /动态分配数组存储赫夫曼编码表void HuffmanCoding(HuffmanTree &HT,HuffmanCode &HC,char *data,int *w,int n,char *str/存放n个字符的权值(均0,构造赫夫曼树HT,并求出n各字符的赫夫曼编码HCi
3、f(n=1 return;int m=2*n-1; /总节点数HT=(HuffmanTreemalloc(m+1*sizeof(HTNode;/0号单元未用HuffmanTree p;int i,j;printf(n;printf(-n;printf(存放哈夫曼树的数组HT的初态:n;printf(叶子节点以及它的双亲节点,权值,左孩子,右孩子分别为:n;for(p=HT+1,i=1;idata=*data;p-parent=p-lchild=p-rchild=0;p-weight=*w;p-code=(char *malloc(n*sizeof(char; printf(%c %2d %2d
4、 %2d %2dn,p-data,p-parent,p-weight,p-lchild,p-rchild;for(;iparent=p-lchild=p-rchild=p-weight=0;p-data=NULL;p-code=(char *malloc(n*sizeof(char; printf( %2d %2d %2d %2dn,p-parent,p-weight,p-lchild,p-rchild;for(i=n+1;i=m;+i/建赫夫曼树/在HT1-i-1选择parent为0且weight最小的两个节点,其序号分别为s1和s2unsigned int m1=32767;unsigne
5、d int m2=32767;/m1,m2为最小和次小权值int s1=0;int s2=0;/s1,s2为最小和次小节点的序号for(int k=1;k=i-1;k+if(HTk.parent=0&(HTk.weight m2=m1;s2=s1;m1=HTk.weight;s1=k;else if(HTk.parent=0&(HTk.weight m2=HTk.weight;s2=k;HTs1.parent=i;HTs2.parent=i;HTi.lchild=s1;HTi.rchild=s2;HTi.weight=HTs1.weight+HTs2.weight;printf(n;print
6、f(-n;printf(存放哈夫曼树的数组HT的终态:n;printf(叶子节点以及它的双亲节点,权值,左孩子,右孩子分别为:n;for(p=HT+1,i=1;idata,p-parent,p-weight,p-lchild,p-rchild;for(;iparent,p-weight,p-lchild,p-rchild;/-从叶子到根逆向求每个字符的赫夫曼编码-HC=(HuffmanCodemalloc(n+1*sizeof(char *;/分配n个字符编码的头指针向量char *cd;cd=(char *malloc(n*sizeof(char; /分配求编码的工作空间cdn-1=0; /
7、编码结束符int start;unsigned int f,c;printf(n;printf(-n;printf(每个字符的哈夫曼编码:n;for(p=HT+1,i=1;icode,R;printf(%c ,p-data;printf(%s,HCi;printf(n;printf(输出字符串的赫夫曼编码:n;for(i=0;i for(p=HT+1,j=0;j if(stri=p-dataprintf(%s,p-code;free(cd;/释放工作空间int main(char dataN,strM;int pN,i;for(i=0;i printf(输入第%d个字符及频率:n,i+1;sc
8、anf(%c,&datai;scanf(%d,πgetchar(;printf(输入字符串:n;for(i=0;i scanf(%c,&stri;HuffmanTree HT;HuffmanCode HC;HuffmanCoding(HT,HC,data,p,N,str;printf(n;return 0;四、 测试结果:五、小结(包括收获、心得体会、存在的问题及解决问题的方法、建议等)注:内容一律使用宋体五号字,单倍行间距本次实验中第三个问题没做出来,我本来想出了一种方法,但是总是出错,我的方法是在结构体中加一个编码域,在形参中加一个字符指针,它的值由主函数中输入的字符串传递过来的。将得出的编码复制到编码域
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 团队成员个人绩效自评模板
- 质量保证品质稳定承诺书5篇
- 文化传播事业繁荣承诺书范文7篇
- 会议组织与策划执行清单
- 财务分析与决策模板
- 公共活动治安管理责任承诺书范文4篇
- 业务费用申请与审批管理工具
- 辽宁省葫芦岛市龙港区市级名校2026年普通高中初三第二次模拟考试语文试题理含解析
- 江苏省扬州市、仪征市市级名校2026届十二校初三下学期3月联考英语试题含解析
- 南京市旭东中学2026年初三第二学期年级质量调研考试英语试题试卷含解析
- 2026年甘肃平凉市华亭煤业集团有限责任公司招聘笔试参考题库附带答案详解
- (一模)2026年深圳市高三年级第一次调研考试政治试卷(含官方答案)
- 上海市普陀区学校(五四制)2025-2026学年六年级上学期期中语文试题(解析版)
- 2026广东清远市清城区医疗卫生共同体总医院招聘编外工作人员42人笔试参考题库及答案解析
- 园林绿化工国家职业技能标准
- 智联招聘考试题库及答案
- 2025-2030中国风能回收市场投资建议及重点企业发展调研研究报告
- 2025上半年湖南能源集团招聘322人笔试历年常考点试题专练附带答案详解2套试卷
- 城市供水排水管网养护指南
- 地理探测器介绍
- GB/T 46831-2025塑料聚丙烯(PP)等规指数的测定低分辨率核磁共振波谱法
评论
0/150
提交评论