哈夫曼树的编码与译码

2026/1/20 23:59:55

上机实验报告

学 院: 计算机与信息技术学院 专 业: 计算机科学与技术(师范) 课程名称: 数据结构

实验题目: 哈夫曼树编码与译码 班级序号: 师范1班 学 号: 201421012731 学生姓名: 邓雪 指导教师: 杨红颖

完成时间: 2015年12月25号

一、实验目的:

本实验的目的是通过对简单的哈夫曼编/译码系统的设计与实现来熟练掌握树形结构在实际问题中的应用。设计要求对输入的一串电文字符实现哈夫曼编码,再对哈夫曼编码生成的代码串进行译码,输出电文字符串。 二、实验环境: Windows 8.1

Microsoft Visual c++ 6.0 三、 实验内容及要求:

本设计必须实现以下几个方面的功能: 1)哈夫曼树的建立 2)哈夫曼编码的生成 3)编码文件的译码 四、概要设计:

创建哈夫曼树,定义二叉树结点值的类型为字符型。

建立编码文件的基本思想是:将要编码的字符串中的字符逐一与预先生成哈夫曼树时保存的字符编码对照表进行比较,找到以后,将字符的编码写入代码文件,直至所有的字符处理完为止。

测验数据:7 5 2 3 8 10 20 五、代码 #include #include #define maxval 1024 #define n 5 #define m 2*n-1 typedef int datatype;

//定义结构体 typedef struct {

float weight;

int lchild,rchild,parent;

}hufmtree;

//定义结构体 typedef struct {

char bits[n]; int start; char ch;

}codetype; hufmtree tree[m]; codetype code[n];

//建立哈夫曼树

void HUFFMAN(hufmtree tree[]) {

int i,j,p1,p2; float small1,small2,f; for(i=0;i

printf(\哈夫曼编码与译码\\n\printf(\请输入叶子结点的权值:\for(i=0;i

for(i=n;i

p1=0;

scanf(\tree[i].weight=f; tree[i].parent=0; tree[i].lchild=0; tree[i].rchild=0; tree[i].weight=0.0;

}

}

p2=0;

small1=maxval; small2=maxval; for(j=0;j<=i-1;j++)

if(tree[j].parent==0)

if(tree[j].weight

if(tree[j].weight

tree[p1].parent=i+1; tree[p2].parent=i+1; tree[i].lchild=p1+1; tree[i].rchild=p2+1;

tree[i].weight=tree[p1].weight+tree[p2].weight;

small2=tree[j].weight; p2=j; small2=small1; small1=tree[j].weight; p2=p1; p1=j;

//哈夫曼编码

void HUFFMANCODE(codetype code[],hufmtree tree[]) {

int i,c,p; codetype cd; for(i=0;i

cd.start=n;

scanf(\c=i+1;


哈夫曼树的编码与译码.doc 将本文的Word文档下载到电脑
搜索更多关于: 哈夫曼树的编码与译码 的文档
相关推荐
相关阅读
× 游客快捷下载通道(下载后可以自由复制和排版)

下载本文档需要支付 10

支付方式:

开通VIP包月会员 特价:29元/月

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:xuecool-com QQ:370150219