分享
分享赚钱 收藏 举报 版权申诉 / 10

类型哈夫曼树的建立与操作.doc

  • 上传人:精品资料
  • 文档编号:8666040
  • 上传时间:2019-07-07
  • 格式:DOC
  • 页数:10
  • 大小:80.72KB
  • 配套讲稿:

    如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。

    特殊限制:

    部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。

    关 键  词:
    哈夫曼树的建立与操作.doc
    资源描述:

    1、实验六 哈夫曼树的建立与操作一、实验要求和实验内容1、输入哈夫曼树叶子结点(信息和权值)2、由叶子结点生成哈夫曼树内部结点3、生成叶子结点的哈夫曼编码4、显示哈夫曼树结点顺序表二、实验要点:根据哈夫曼算法,建立哈夫曼树时,可以将哈夫曼树定义为一个结构型的一维数组 HuffTree,保存哈夫曼树中各结点的信息,每个结点包括:权值、左孩子、右孩子、双亲,如图 5-4 所示。由于哈夫曼树中共有 2n-1 个结点,并且进行 n-1 次合并操作,所以该数组的长度为 2n-1。构造哈夫曼树的伪代码如下:在哈夫曼树中,设左分支为 0,右分支为 1,从根结点出发,遍历整棵哈夫曼树,求得各个叶子结点所表示字符的

    2、哈夫曼编码。三、.函数的功能说明及算法思路BTreeNode* CreateHuffman(ElemType a,int n)/构造哈夫曼树1.对给定 n 个权值a1,a2,an 的叶子结点,构成具有 n 棵二叉树的森林F=T1,T2,Tn, 其中每棵二叉树 Ti 只有一个权值为 ai 的根结点,其左右子树为空。2.在 F 中选取两棵根结点的权值最小的树作为左右子树构造一棵新的二叉树,且新的二叉树的根结点的权值为其左右子树上根结点的权值之和。3.从 F 中删除构成新树的两棵树,并把新树加入到 F 中。4.重复 2、3 两步,直到 F 只有一棵树为止。则 F 中的树就是哈夫曼树。void Pri

    3、ntBTree(BTreeNode *BT)/以广义表形式输出哈夫曼树主要用到了递归的思想。void HuffManCoding(BTreeNode *BT, int len)/求哈夫曼编码构造一棵二叉树,左分支标识为 0,右分支标识为 1,把 n 个字符看成是一棵树的 n 个叶子结点,把从根结点到每个叶子结点路径上的分支标识序列作为字符的编码,则得到哈夫曼编码。四、实验步骤和提示1、编写有关哈夫曼树操作的函数:构造哈夫曼树 BTreeNode * CreateHuffman(ElemType a,int n); 以广义表形式输出哈夫曼树 void PrintBTree(BTreeNode *

    4、BT); 求哈夫曼编码 void HuffManCoding(BTreeNode *BT, int len)。把结构定义以及这些哈夫曼树操作函数存放在头文件 Haffman.h 中。2、 设在一份电文中共使用 5 种字符,各字符在电文中出现的频率依次为2, 6, 3, 8, 7。编写相应的测试程序来输出编码哈夫曼树及各字符的哈夫曼编码。测试程序(即主函数)存放在文件 test7.cpp 中。#include#define MAX 20using namespace std;typedef char valType;typedef double wghType;struct HFMnodeval

    5、Type data;wghType weight;int parent;int lchild;int rchild;/每个节点的编码/code存储编码/start存储编码是从code 数组的第几个开始/在编码过程中从叶子节点向根节点逆推struct HFMcodechar codeMAX;int start;/建立哈夫曼树void createHFMtree(HFMnode *node, int n)int i;/m1,m2为当前还没用到的节点中权值最小和次小的权值int m1, m2;/l,r为每次构建一个父节点其左右儿子节点的序号int l, r;for (i = n + 1; i cases;while (cases-)cout n;int i;for (i = 1; i nodei.data;cout nodei.weight;for (i = 1; i = 2 * n - 1; i+)nodei.parent = nodei.lchild = nodei.rchild = 0;/建立哈夫曼树createHFMtree(node, n);/求每个节点的哈夫曼编码createHFMcode(node, hcd, n);/打印每个节点的编码cout “输出每个节点的哈夫曼编码: “ endl;printHFMcode(node, hcd, n);return 0;

    提示  道客多多所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
    关于本文
    本文标题:哈夫曼树的建立与操作.doc
    链接地址:https://www.docduoduo.com/p-8666040.html
    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

    道客多多用户QQ群:832276834  微博官方号:道客多多官方   知乎号:道客多多

    Copyright© 2025 道客多多 docduoduo.com 网站版权所有世界地图

    经营许可证编号:粤ICP备2021046453号    营业执照商标

    1.png 2.png 3.png 4.png 5.png 6.png 7.png 8.png 9.png 10.png



    收起
    展开