实验6:哈夫曼树及哈夫曼编码的算法实现 - 副本
2020-04-03
来源:易榕旅网
实验6:哈夫曼树及哈夫曼编码的算法实现
实验所需 学时数 实验目的 2) 掌握哈夫曼树的建立算法; 3) 掌握哈夫曼树的应用(哈夫曼编码和译码)。 对输入的一串电文字符实现哈夫曼编码,再对哈夫曼编码生成的代码串进行译码,输出电文字符串。 计算机及VC++ 6.0软件 2学时 1) 掌握哈夫曼树的基本概念及其存储结构; 实验内容 实验所需 器材 内容要求: 1、初始化(Init):能够对输入的任意长度的字符串s进行统计,统计每个字符的频度,并建立哈夫曼树 2、建立编码表(CreateTable):利用已经建好的哈夫曼树进行编码,并将每个字符的编码输出。 3、编码(Encoding):根据编码表对输入的字符串进行编码,并将编码后的字符串输出。 4、译码(Decoding):利用已经建好的哈夫曼树对编码后的字符串进行译码,并输出译码结果。 测试数据: 输入字符串“this*program*is*my*favourite”,完成这28个字符的编码和译码。 实验结果 1、演示程序运行结果。 2、说明调试过程中出现的现象 学生实验评价依据: 优:实验认真、刻苦,有钻研精神,不无故缺席。 良:能认真对待实验,不无故缺席。 中:基本能认真对待实验,不无故缺席。 差:对待实验不够认真,有少量迟到、早退或无故缺席现象。 不及格:对待实验马虎、敷衍,经常迟到、早退或无故缺席。 #include #include #define maxvalue 10000 //定义最大权值常量 #define maxnodenumber 100 //定义节点最大数 #define maxbit 10 //定义哈弗曼编码最大长度 typedef struct{ //定义新数据类型即节点结构 int weight; //权重域 int parent,lchild,rchild; //指针域 }htnode; //节点类型标识符 // typedef htnode * huffmanstree; //定义哈弗曼数类型 htnode ht[maxnodenumber]; //定义三叉链表存储数组 typedef struct {//定义保存一个叶子节点哈弗曼编码的结构 int bit[maxbit]; //定义一维数组为编码域 int start; //定义位置域 }hcnodetype; //定义编码类型 htnode * creatstree(int n) //huffmanstree creatstree(int n) //建立哈夫曼树算法实现函数 { int i,j,m1,m2,k1,k2; //局部变量 for(i=0;i<2*n-1;i++) //初始化各节点 { ht[i].weight=0; //权重初始化为0 ht[i].parent=-1; //根节点和给左右孩子初始化为-1 ht[i].lchild=-1; ht[i].rchild=-1; } for(i=0;i