- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
《数据结构》课程实验报告
哈
夫
曼
编
译
码
器
-的设计与实现
华中科技大学电信系
2006年11月
目录
需求分析 3
详细设计 4
调试分析 5
用户使用说明: 错误!未定义书签。
测试结果: 错误!未定义书签。
附录 6
需求分析
哈夫曼编码是对原有的等长编码的一种改进。原有的等长编码将所有的字符用8个bit表示,但由于各个字符的使用率的不同,则在数据传输的过程中造成了空间上的浪费。哈夫曼编码则是根据字符的使用率的高低对字符进行不等长的编码,从而使使用率高的字符占用较少的空间,从而在传输的过程中大大提高了数据的空间传输效率。
本程序为Huffman编/译码器的设计与实现,对于一串由用户输入的字符串,本程序实现对其编码,并将每个字符和其对应的权值储存在文件中,以便实现程序重启后仍然能够实现译码的功能。
本程序还可以实现译码的功能,原译码结果保存在另一个文件中。
用户可以用人机交互的方式选择编码和译码,以及输出Huffman编码和Huffman编码的重新设置。
用户可以将编码的权值文件及编码结果单独传递,在另一终端上用本程序实现译码功能,以达到保密功能。
概要设计:
本程序的流程图如下
详细设计
Huffman编码部分的伪码如下:(参考网上课件)
typedef struct{
unsigned int weight;//权值分量(可放大取整)
unsigned int parent,lchild,rchild; //双亲和孩子分量
}HTNode,*HuffmanTree;//用动态数组存储Huffman树
typedef char**HuffmanCode; //动态数组存储Huffman编码表
Void HuffmanCoding(HuffmanTree HT, HuffmanCode HC, int *w, int n)
{ if (n=1)return;
m=2*n-1; //n 个叶子的HuffmanTree共有2n-1个结点;
HT=(HuffmanTree)malloc((m+1)*sizeof(HTNode)); //0单元未用
for(p=HT,i=1; i=n; ++i,++p,++w)*p={*w,0,0,0}; //给前n个单元初始化
for(;i=m; ++i,++p)*p ={0,0,0,0}; //对叶子之后的存储单元清零
for(i=n+1;i=m; ++i) //建Huffman树(从叶子后开始存内结点)
{Select(HT, i-1, s1, s2); //在HT[1…i-1]选择parent为0且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;
}
HC=(HuffmanCode)malloc((n+1)*sizeof(char*)); //分配n个字符编码的头指针向量(一维数组)
cd=(char*) malloc(n*sizeof(char)); //分配装编码的临时空间
cd[n-1]=“\0”; //编码结束符(从cd[0]~cd[n-1]为合法空间)
for(i=1;i=n;++i) //逐个字符求Huffman编码
{ start=n-1; //编码结束符位置
for(c=i, f=HT[i].parent; f!=0; c=f, f=HT[f].parent)
//从叶子到根逆向求编码
if(HT[f].lchild==c) cd[--start]=“0”;
else cd[--start]=“1”;
HC[i]=(char*)malloc((n-start)*sizeof(char));//为第i个字符编码分配空间
strcpy(HC[i],cd[start]); //从cd复制编码串到HC
}
free(cd); //释放工作空间
}//HuffmanCoding
调试分析
对Huffman编码有了一个很好的认识,通过对Huffman编码的实现,对Huffman编码有了具体的认识和实践,对二叉树又有了一个更新的认识。对以前没有接触过的文件有了一定的认识,可
您可能关注的文档
最近下载
- 《食品经营许可证》延续申请表.doc VIP
- 产教融合视角下的应用型高校微专业建设的探索与实践.docx VIP
- 【宏观专题】牛市进程:十大观察指标-250901-华创证券.pdf VIP
- IBM-中外运产品创新咨询项目IPD体系沟通材料_v1.0_20200228.pptx VIP
- 课件智慧管廊解决方案.pptx VIP
- 2024秋新人教版英语七年级上册课件 Starter Unit 2 Keep Tidy! Section B.pptx
- 油菜高产高效栽培技术详解演示文稿.ppt VIP
- 施工现场安全管理考核明细及罚款金额.doc
- 第5课 罗马城邦和罗马帝国 课件(共23张PPT).pptx VIP
- 血栓相关课件.pptx
文档评论(0)