下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
华北科技学院计算机系综合性实验实验报告课程名称数据结构B实验学期2023至2023学年第1学期学生所在系部计算机学院年级10级专业班级学生姓名学号任课教师实验成绩计算机系制《数据结构B》课程综合性实验报告开课实验室:实验题目哈夫曼编码的实现一、实验目的1、掌握线性链表的插入、删除等算法。3、掌握Huffman树的概念及构造方法。4、掌握二叉树的存储结构及遍历算法。5、构造Huffman树及Huffman编码二、设备与环境微型计算机、Windows系列操作系统、VisualC++6.0软件三、实验内容根据字符出现的频率情况,创建Huffman树,再将各字符对应的哈夫曼编码显示在屏幕上四、实验结果及分析#include<stdio.h>#include<string.h>#include<stdlib.h>typedefstruct{ unsignedintweight,parent,lchild,rchild;}HTNode,*HuffmanTree;//动态分配数组存储哈夫曼树typedefchar**HuffmanCode;//动态分布数组存储哈夫曼编码表voidSelect(HuffmanTreeHT,intn,int&s1,int&s2){//在HT[1...n]选择parent为且weight最小的两个节点,分别赋给s1,s2//s1最小,s2次小intmin=0,minn=0; HT[0].weight=10000; for(inti=1;i<=n;i++) { if(HT[i].parent==0) { if(HT[i].weight<HT[min].weight) { minn=min; min=i; }elseif(HT[i].weight<HT[minn].weight) minn=i; } } s1=min; s2=minn;}voidHuffmanCoding(HuffmanTree&HT,HuffmanCode&HC,int*h,intn){ //w存放n个字符的权值(均>0),构造哈夫曼编码HT,并求出n个字符的哈夫曼编码HC。 inti,m,s1,s2; HuffmanTreep; if(n<=1) printf("结点数过少"); m=n*2-1; HT=(HuffmanTree)malloc((m+1)*sizeof(HTNode));//0号单元未用 for(p=HT+1,i=1;i<=n;++i,++p,++h) { (*p).weight=*h; (*p).lchild=0; (*p).rchild=0; (*p).parent=0; }//初始化赫夫曼树 for(;i<=m;++i,++p) { (*p).weight=0; (*p).parent=0; (*p).lchild=0; (*p).rchild=0; } for(i=n+1;i<=m;++i) { //建立哈夫曼树 Select(HT,i-1,s1,s2);//在HT[1..i-1]选择parent为且weight最小的两个结点,其序号分别为s1和s2 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; } //---从叶子到根逆向求每个字符的哈夫曼编码--- char*mr; unsignedintstart,c,f; HC=(HuffmanCode)malloc((n+1)*sizeof(char*));//分配n个字符编码的头指针向量 mr=(char*)malloc(n*sizeof(char));//分配求编码的工作空间 mr[n-1]='\0';//编码结束符 for(i=1;i<=n;++i)//逐个字符求赫夫曼编码 { start=n-1; for(c=i,f=HT[i].parent;f!=0;c=f,f=HT[f].parent)//从叶子到根逆向求编码 if(HT[f].lchild==c) mr[--start]='0'; elsemr[--start]='1'; HC[i]=(char*)malloc((n-start)*sizeof(char));//为第i个字符编码分配空间 strcpy(HC[i],&mr[start]); } free(mr);//释放工作空间}//HuffanCodingvoidmain(){ HuffmanTreeHT; HuffmanCodeHC; int*w,*p,i,n,k; printf("输入结点个数:k="); scanf("%d",&k); w=(int*)malloc(k*sizeof(int)); p=w; printf("请输入每个结点的权值:\n"); for(i=1;i<=k;++i,++w) { scanf("%d",w); } HuffmanCoding(HT,HC,p,k); printf("赫夫曼树:\n"); printf("weightparentlchildrchild\n"); n=k*2-1; for(i=1;i<=n;i++) { printf("%d%8d%8d%8d%8d\n",i,HT[i].weight,HT[i].parent,HT[i].lchild,HT[i].rchild); } printf("赫夫曼编码:\n"); for(i=1;i<=k;++i) { printf("%d",i); puts(HC[i]); }}五、收获和体会Huffman树,又称为最优树,是一类带权路径长度最短的树,有着广泛的应用。通过对数据结构的学习,让我更加的对C语言的编程有了深刻的理解和体会。虽然对数据结构的掌握还不够好,但是有C语言的编程做基础,就会很好的理解,对于huffman树的存储开始掌握的不是很好,但是看了其他同学的程序后,对它的理解有了更深的体会。现在通过这次综合性试验我已完全
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年度年福建省高校教师资格证之高等教育法规综合练习试卷B卷附答案
- 2023年付里叶红外分光光度计资金筹措计划书
- 2024年xx村集体资金使用用途四议两公开专题会议记录
- 第二节 先天性行为和学习行为课件
- 四年级数学(上)计算题专项练习及答案
- 2024年专业泥工承揽协议模板
- 2024人力资源管理优化项目协议
- 2024砂石料订货与分销协议细则
- 2024年度企业债券投资与合作协议
- 计算机网络期末考试试题及答案完整版
- 第四单元两、三位数除以一位数(单元测试)-2024-2025学年三年级上册数学苏教版
- 浙江省9+1高中联盟2023-2024学年高一上学期11月期中英语试题 含解析
- 2025届高三化学一轮复习 第13讲 铁盐、亚铁盐及其转化 课件
- 【电商企业跨国并购的绩效探析案例:以阿里巴巴并购Lazada为例(论文)14000字】
- 云南太阳能资源分析
- 2024智慧园区系统建设规范
- 第5课 互联网接入 教学设计 2023-2024学年浙教版(2023)初中信息技术七年级上册
- 小学语文一年级上册课件第四单元01-10 ai ei ui
- 传感器技术-武汉大学
- 2024年中国船级社福建福州分社招聘60人历年高频500题难、易错点模拟试题附带答案详解
- 2024上半年四川内江市东兴区部分事业单位考聘112人高频500题难、易错点模拟试题附带答案详解
评论
0/150
提交评论