(哈夫曼编码译码器)(课程设计报告).docVIP

  1. 1、本文档共16页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
(哈夫曼编码译码器)(课程设计报告).doc

哈夫曼编码_译码器 一、目的 利用哈夫曼编码进行信息通信可以大大提高信道利用率,缩短信息传输时间,降低传输成本。但是,这要求在发送端通过一个编码系统对待传数据预先编码,在接收端将传来的数据进行译码(复原)。对于双工信道(即可以双向传输信息的信道),每端都需要一个完整的编/译码系统。 本课程设计的目的就是需求,编码是以二叉树形式存储故使用到结构中的树上,构造的系统要对哈曼能对特定的字符进行哈曼,并将字符串进行哈曼编码进行解码系统设计要求,本系统要与用户进行良好的交互,能将相关的编码解码操作进行文件读取与储存,进行信息记录合理的数据结构,存储待编码,易于找出最小值,易于构造haffman树功能主要分,编码、解码和打印haffman树 3.用户交互设计 本系统使用控制台菜单以及文件的读写方式与用户进行字符的结构体code用来存储编码字符及其权值。 { public: char keymark;//编码字符 int key;//权值 }; 定义树的节点的基本节点。 { friend class binTree;//element可以访问binTree-友元关系 public: element() :leftchild(NULL), rightchild(NULL), parent(NULL), mark(0){}; code data;// 保存本结点的使用频度和其它数据。 int mark;//用于扫描判断,在coding_decode里面,作用:标记变量,mark等于0说明当前 //结点的左子树的叶子还没有扫描完,继续扫描 element *leftchild, *rightchild, *parent; }; 定义二叉树结构用于构造哈弗曼树以及小顶堆使用。 { public: binTree(){ root = new element; } binTree(binTree bt1, binTree bt2)// { root = new element; root-leftchild = bt1.root; root-rightchild = bt2.root; root-data.key = bt1.root-data.key + bt2.root-data.key; bt1.root-parent = bt2.root-parent = root; } element *root; }; haffman树是基于二叉树结构的,构造haffman树时要求可以快速的找出最小值,故使用小顶堆结构,又称为排序二叉树,数据进行存储,扫描找出最小值,进行的构造 小顶堆的具体功能如下: 结构minHeap(){ heap = NULL; }; minHeap(int maxsize); 将新的元素插入到中int insert(binTree x); 输出并删除堆顶元素int removeMin(binTree x); 判断堆是否为空int isEmpty(){ return currentsize == 0; }; 判断堆是否已满;int isFull(){ return currentsize == maxheapsize; }; void filterDown(int start, int end); 自底向上进行调整为最小堆。void filterUp(int end); haffman树具体功能如下: 构造主要依赖binTree。,huffcode * coding(binTree *tree, int L)haffman树后,对haffman树进行遍历,访问一次左孩子为‘0’访问一次右孩子为‘1’对所有叶子节点进行访问,并记录叶子节点路径将路径的进行存储在用户使用功能时候,扫描已存储的haffman编码,进行对应的输出如下 huffcode * coding(binTree *tree, int L) {//编码程序-参数:树和长度 element *current = tree-root; for (int i = 0; i L; i++) j = 0; currentFront = current = tree-root; while (1) then if (current-leftchild-mark == 0)//mark等于0说明当前结点的左子 //树的叶子还没有扫描完,继续扫描 then hc[i].hufc[j] = 0;//记下路径,往左为0,往右为1 j++; if (current-leftchild-leftchild == NULL) then hc[i].hufc[j] = \0; hc[i

文档评论(0)

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

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

1亿VIP精品文档

相关文档