哈夫曼编码译码数据结构课程设计王政锐.docVIP

哈夫曼编码译码数据结构课程设计王政锐.doc

  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文档。上传文档
查看更多
哈夫曼编码译码数据结构课程设计王政锐.doc

数据结构课程设计 题目:哈夫曼编码译码 姓名: 专业 目录 一、系统开发的背景 2 TOC \o 1-5 \h \z 二、 系统分析与设计 2 (1) 系统功能要求 2 (2) 设计包含的几个方面 3 HYPERLINK \l bookmark12 \o Current Document \h 三、 详细设计 3 四、 流程图 8 HYPERLINK \l bookmark26 \o Current Document \h 五、 调试结果 10 HYPERLINK \l bookmark36 \o Current Document \h 六、 心得体会 11 七、 附录(源代码) 11 哈夫曼编/译码器系统 一、系统开发的背景 为了提高信道利用率,缩短信息传输时间,降低传输成本,且在 信息发送端通过一个编码系统对待传数据预先编码,在信息接收端将 传來的数据进行译码(复原),因此设计哈夫曼编码/译码器系统。 二、系统分析与设计 (一)系统功能要求: 【任务要求】 1:初始化(Initialization)o从终端读入字符集大小n,以及n个 字符和n个权值,建立哈夫曼树,并将它存于文件hfmTree中。 2:编码(Encoding)o利用以建好的哈夫曼树(如不在内存,则从文 件hfmTree中读入),对文件To Be Tran中的止文进彳亍编码,然后将 结果存入文件CodeFile屮。 3:译码(Decoding)o利用已建好的哈夫曼树将文件Code File中的 代码进行译码,结果存入文件Text File中。 4:印代码文件(Print)o将文件Code File以紧凑格式显示在终端 上,每行50个代码。同时将此字符形式的编码文件写入文件Code Prin 中。 5:印哈夫曼树(Tree Printing)。将已在内存中的哈夫曼树以直观 的方式(树或凹入表形式)显示在终端上,同吋将此字符形式的哈夫 曼树写入文件Tree Print中。 【测试数据】 利用教科书中的数据调试程序。 用下表给出的字符集和频度的实际统计数据建立哈夫曼树,并实现以 下报文的编码和译码:“THIS PROGRAM IS MY FAVORITE”。 字符 A B C D E F G H I J K L M 频度 186 64 13 22 32 103 21 15 47 57 1 5 32 20 字符 N O P Q R S T U V W X Y Z 频度 57 63 15 1 48 51 80 23 8 18 1 16 1 (-)设计包含的几个方面: 哈夫曼树的建立: 哈夫曼树的建立由哈夫曼算法的定义可知,初始森林中共有n棵只含有根结 点的二叉树。算法的第二步是:将当前森林屮的两棵根结点权值最小的二叉树, 合并成一棵新的二叉树;每合并一次,森林中就减少一棵树,产生一个新结点。 显然要进行n—1次合并,所以共产生n—1个新结点,它们都是具有两个孩了的 分支结点。由此可知,最终求得的哈夫曼树中一共有2n — l个结点,其中n个结 点是初始森林的n个孤立结点。并且哈夫曼树中没有度数为1的分支结点。我们 可以利用一个大小为2n-l的一维数组来存储哈夫曼树小的结点。 哈夫曼编码: 要求电文的哈夫曼编码,必须先定义哈夫曼编码类型,根据设计要求和实际 需耍定义的类型如下: typedet struct { char ch; //存放编码的字符 char bits[N+l] ; //存放编码位串 int len; //编码的长度 } CodeNode; //编码结构体类型 代码文件的译码: 译码的基本思想是:读文件中编码,并与原先生成的哈夫曼编码表比较,遇 到相等时,即取岀其对应的字符存入一个新串中。 三、详细设计 (1)①哈夫曼树的存储结构描述为: #define N 50 //叶子结点数 #define M 2*N-1 //哈夫曼树中结点总数 typedef stnict { int weight; int lchild, rchild, parent; //左右孩子及双亲指针 JHTNode; typedef HTNode HuffmanTree[M+l]; ②哈弗曼树的算法 void CreateHT(HTNode ht[],int n) int i,k,Inode,mode; int minl,min2; for (i=0;i2*n-l;i++) ht[i].parent=ht[i].lchild=ht[i].rchild=-l; for (i=n;i2*n-l;i++) { minl=min2=32767; lnode=rnode=-l; for (k=();k=i-l;k++) { if (ht[k].parent==-l) if (htLk

文档评论(0)

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

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

1亿VIP精品文档

相关文档