哈夫曼编译码系统的设计与实现.docxVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
哈夫曼编/译码系统的设计与实现 一、 实验项目简介: 问题描述: 利用哈夫曼编码进行通信可以人大提高信道利用率,缩短信息传输吋间,降低传输成 本。但是,这要求在发送端通过一个编码系统对待传数据预先编码,在接收端将传来的数据 进行译码(解码)。对于双工信道(即可以双向传输信息的信道),每端都需要一个完整的编 /译码系统。试为这样的信息收发站设计一个哈夫曼编/译码系统。 一个完整的系统应具有以下功能: 1) 初始化(Tnitialzation)。从数据文件DataFile. data中读入字符及每个字符的权值,建 立哈夫曼树HuffTree; 2) 编码(EnCoding)o用已建好的哈夫曼树,对文件ToBeTran. data中的文本进行编码 形成报文,将报文写在文件Code, txt中; 3) 译码(Decoding),,利用已建好的哈夫曼树,对文件CodeFi le. data中的代码进行解 码形成原文,结果存入文件Textfile, txt中; 4) 输出(Output)。输出DataFile. data中出现的字符以及各字符出现的频度(或概率); 输出 ToBeTran. data 及其报文 Code, txt;输出 CodeFile. data 及其原文 Textfile, txt; 耍求:所设计的系统应能在程序执行的过程中,根据实际情况(不同的输入)建立 DataF订e. data、ToBeTran. data和CodeFi le. data三个文件,以保证系统的通用性。 二、 实验冃的: 理解哈夫曼树的特征及其应用;在对哈夫曼树进行理解的基础上,构造哈夫曼树,并用 构造的哈夫曼树进行编码和译码;通过该实验,使学生对二叉树的构建、遍历等以及哈夫曼 编码的应用冇更深层次的理解。 实验步骤:实验分2次完成 第1次:完成程序的主框架设计,进行调试,验证其正确性;(2学吋) 第2次:详细设计,进行调试,对运行结果进行分析,完成实验报告。(2学时) 三、 参考程序 (一)基本实验的参考程序 文件HuffermanDef. h是赫夫曼树和赫夫曼编码的存储表示 typedef struct { char ch; unsigned int weight; unsi gned int parent, 1 chi Id, rchi Id; }HTNode, *HuffmanTree; /* 动态分配数组存储赫夫曼树*/typedef char **Huf fmanCode; /* 动态分配数组存储赫夫曼编码表*/ 文件HuffermanUse. c是求赫夫曼编码 #includeIIuffernianDef. h int Min(HuffmanTree t, int i) { /* 函数void select()调用*/ int j,flag; unsigned int k=UINT_MAX; /*取k为不小于可能的值*/ for(j=l;j=i;j++) if(t[j]. weightkt[j]. parent==0) k=t[j]. weight, flag=j; t[f lcig]? parent二 1; return flag; } void Select(HuffmanTree t, int i, int *si, int *s2) { /* si为故小的两个值中序号小的那个*/ int j; *sl=Min(t, i); *s2=Min(t, i); if(*sl*s2) { j=*sl; *sl=*s2; *s2=j; } } HuffmcinCode 1 lu f f mtinCod i ng (Hu f f mtinTr ee *HT, cheir * ch, int int n) { /* W存放n个字符的权值(均0),构造赫夫曼树I1T,并求出n个字符的赫夫曼编码I1C */ HuffmanCode HC; int m, i, si, s2, start; unsigned c, f; HuffmtinTree p; char *cd; if(n=l) return NULL; m=2*n-l; //哈夫曼树的结点数 *HT= (HuffmanTree)malloc ((m+1)*sizeof (HTNode)); /* 0 号单元未用*/ for (p= (*HT)+1, i=l; i=n;++i, ++p, ++w, ++ch) { (*p)? ch=*ch; (*p)? weight二*w; (*p)? parent二0; (*p). lchild=0; (*p). rchild=0; } for(:i=m;++i, ++p) (*p)? parent二0; for (i=n+l; i=m;++i) /*

文档评论(0)

ggkkppp + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档