北京邮电大学信通院数据结构实验三哈夫曼树实验报告.docxVIP

北京邮电大学信通院数据结构实验三哈夫曼树实验报告.docx

  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文档。上传文档
查看更多
2009级数据结构实验报告 实验名称:实验三一一哈夫曼编/解码器的实现 学生姓名:陈聪捷 H 期:2010年11月28日 实验要求 一、 实验目的: 了解哈夫曼树的思想和相关概念; 二、 实验内容: 利用二叉树结构实现哈夫曼编/解码器 初始化:能够对输入的任意长度的字符串s进行统计,统计每个字符的频度,并建立 哈夫曼树。 建立编码表:利用已经建好的哈夫曼树进行编码,并将每个字符的编码输出。 编码:根据编码表对输入的字符串进行编码,并将编码后的字符串输出。 译码:利用已经建好的哈夫曼树対编码后的字符串进行译码,并输出译码结果。 打印:以直观的方式打卬哈夫曼树。 计算输入的字符串编码前和编码后的长度,并进行分析,讨论哈夫曼编码的压缩效果。 用户界面可以设计成“菜单”方式,能进行交互,根据输入的字符串中每个字符出现 的次数统计频度,对没有出现的字符一律不用编码。 程序分析 2.1存储结构 二叉树 template class T class BiTree { public: Bi Tree (); 〃构造函数,其前序序列由键盘输入 BiTree(void) ; //析构函数 BiNodeT* Gotroot () ; //获得指向根结点的指针 protected: BiNodeT *root; //指向根结点的头指针 }; //声明类BiTree及定义结构BiNode Data: 二叉树是由一个根结点和两棵互不相交的左右子树构成 二叉树小的结点具有相同数据类型及层次关系 哈夫曼树类的数据域,继承节点类型为int 哈夫曼树类的数据域,继承节点类型为int的二叉树 class IluffmanTree:publ ic Bi.Treeint data: HCode* HCodeTable;//编码表 int tSize; //编码表中的总字符数 二叉树的节点结构 template class T struct BiNode {T data; template class T struct BiNode { T data; T lchild; T rchild; T parent; //二叉树的结点结构 //记录数据 //左孩子 //右孩子 //双亲 }; 75意图: T data T lchild T rchild T parent 编码表的节点结构 struct HCode char data; //编码表中的字符 char codeClOO]; 〃该字符对应的编码 }; 75意图: char data char code[100] 待编码字符串由键盘输入,输入时用链表存储,链表节点为 struct Node unsigned int count;//该字符的权值 bool used; Node* next; 〃建立树的吋候该字符是否使用过 //保存下一个节点的地址 }; char character unsigned int count bool used Node* next 示意图: 2.2关键算法分析 1 ?初始化函数(void HuffmanTree::Init(string Input)) 算法伪代码: 初始化链表的头结点 获得输入字符串的第一个字符,并将其插入到链表尾部,n=l(n记录的是链表 中字符的个数) 从字符串第2个字符开始,逐个取出字符串屮的字符 3」将当前取出的字符与链表中已经存在的字符逐个比较,如果当前取出 的字符与链表中已经存在的某个字符相同,则链表中该字符的权值加1。 3.2如果当前収出的字符与链表中已经存在的字符都不相同,则将其加入 到链表尾部,同时n++ tSize=n(tSize记录链表中字符总数,即哈夫曼树屮叶子节点总数) 创建哈夫曼树 销毁链表 源代码: void HuffmanTree::Init(string Input) { Node *front=new Node; 〃初始化链表的头结点 if(! front) throw exception^堆空间用尽”); front-next=NULL; front-character=NULL; front-count=0; Node *pfront=front; char ch=InputlOJ; 〃获得第一个字符 Node* Newl=new Node; if(!Newl) throw exception(堆空间用尽”); New 1 -character=ch; 〃将笫一个字符插入链表 Newl-count=l; Newl-next=pfront-next; pfront-next=New 1; bool replace=0; 〃判断在已经写入链表的字符中是否有与当前读出的字符相同的字符 int n=l; 〃统计链表屮字符个数 for(in

文档评论(0)

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

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

1亿VIP精品文档

相关文档