《数据结构》实验报告
实验名称: 构造哈夫曼树及哈夫曼编码
专 业: 计算机科学与技术专业
班 级: 计算机科学与技术
姓 名:
《数据结构》实验报告
实验名称: 构造哈夫曼树及哈夫曼编码
专 业: 计算机科学与技术专业
班 级: 计算机科学与技术
姓 名:
学 号:
完成日期: 2012/11/22
2012年 11月22 日
问题描述
构造一个哈夫曼树,并根据所构造的哈夫曼树求其哈夫曼树的编码;
需求分析
哈夫曼树有叫做最优二叉树,它是指对于一组带有确定的权值的叶节点,构造具有最小的带权路径程度的二叉树。
在数据通信中,经常需要将传送的文字转换成由二进制字符0,1组成的二进制串,称之为编码。如果在所有的编码中每个字符的编码都一样的长短则有的字符在应用中出现的次数多有的字符在应用中出现的次数少,这样的话有的电文的编码会很长,所以就想用不同长度的编码区代表字符,及在电文中出现的概率大的用短的字符表示,而出现的概率小的用长的字符表示,则得到的电文可能就比较短。
基于以上的需求与要求,就出现了哈夫曼编码。
概要设计
先建立哈夫曼树的结构,即哈夫曼树的构造算法;
再建立哈夫曼树编码的结构,即哈夫曼树编码的算法;
再带入数据进行验证。
详细设计
1.、哈夫曼树构造算法的编码:
#include<iostream>
using namespace std;
#define MAXVALUE 100
#define MAXLEAF 30
#define MAXNODE MAXLEAF*2-1
#define MAXBIT 10
typedef struct
{
int weifht; //权值
int parent; //双亲节点
int lchild; //左孩子
int rchild; // 右孩子
}HNodeType;
typedef struct
{
int bit[MAXBIT];
int start;
}HCodeType;
void HuffmanTree(HNodeType HuffNode[],int n)
{
int i,j,m1,m2,x1,x2;
for(i = 0;i < 2*n-1;i++) //对数组进行初始化
{
HuffNode[i].weifht = 0;
HuffNode[i].parent = -1;
HuffNode[i].lchild = -1;
HuffNode[i].rchild = -1;
}
for(i = 0;i < n;i++) //输入各个节点的权值
{
cout<<"输入第"<<i<<"个叶节点的权值:"<<endl;
构造哈夫曼树及哈夫曼编码 来自淘豆网www.taodocs.com转载请标明出处.