北邮数据结构实验报告.docx

  1. 1、本文档共17页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
北邮数据结构实验报告

北邮数据结构实验报告   北京邮电大学信息与通信工程学院   XX级数据结构实验报告   实验名称: 实验三哈夫曼编/解码器的实现   学生姓名:陈聪捷   日 期: XX年11月28日   1.实验要求   一、实验目的:   了解哈夫曼树的思想和相关概念;   二、实验内容:   利用二叉树结构实现哈夫曼编/解码器   1.初始化:能够对输入的任意长度的字符串s进行统计,统计每个字符的频度,并建立哈夫曼树。   2.建立编码表:利用已经建好的哈夫曼树进行编码,并将每个字符的编码输出。   3.编码:根据编码表对输入的字符串进行编码,并将编码后的字符串输出。   4.译码:利用已经建好的哈夫曼树对编码后的字符串进行译码,并输出译码结果。   5.打印:以直观的方式打印哈夫曼树。   6.计算输入的字符串编码前和编码后的长度,并进行分析,讨论哈夫曼编码的压缩效果。   7.用户界面可以设计成“菜单”方式,能进行交互,根据输入的字符串中每个字符出现的次数统计频度,对没有出现的字符一律不用编码。   2. 程序分析    存储结构   二叉树   template   class BiTree   {   public:   BiTree(); //构造函数,其前序序列由键盘输入   ~BiTree(void); //析构函数   BiNode* Getroot(); //获得指向根结点的指针   protected:   BiNode *root; //指向根结点的头指针   };   //声明类BiTree及定义结构BiNode   Data:   二叉树是由一个根结点和两棵互不相交的左右子树构成     哈夫曼树类的数据域,继承节点类型为int的二叉树 class HuffmanTree:public BiTree    data:   HCode* HCodeTable;//编码表   int tSize; //编码表中的总字符数   二叉树的节点结构   template   struct BiNode //二叉树的结点结构 {   T data; //记录数据   T lchild; //左孩子   T rchild; //右孩子   T parent; //双亲   };   编码表的节点结构   struct HCode   {   char data; //编码表中的字符   char code; //该字符对应的编码   };   待编码字符串由键盘输入,输入时用链表存储,链表节点为 struct Node   {   char character; //输入的字符   unsigned int count;//该字符的权值   bool used; //建立树的时候该字符是否使用过   Node* next; //保存下一个节点的地址   };   示意图:      关键算法分析   1.初始化函数(void HuffmanTree::Init(string Input))   算法伪代码:   1.初始化链表的头结点   2.获得输入字符串的第一个字符,并将其插入到链表尾部,n=1(n记录的是链表   中字符的个数)   3.从字符串第2个字符开始,逐个取出字符串中的字符    将当前取出的字符与链表中已经存在的字符逐个比较,如果当前取出   的字符与链表中已经存在的某个字符相同,则链表中该字符的权值加1。    如果当前取出的字符与链表中已经存在的字符都不相同,则将其加入   到链表尾部,同时n++   =n(tSize记录链表中字符总数,即哈夫曼树中叶子节点总数)   5.创建哈夫曼树   6.销毁链表   源代码:   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;  

文档评论(0)

feixiang2017 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档