文档介绍:华北科技学院计算机系综合性实验
实 验 报 告
课程名称 数据结构
实验学期 2010 至 2011 学年 第 2 学期
学生所在系部 管理系
年级 2009级 专业班级 电商B092
学生姓名 刘伟 学号 1
任课教师 兰芸
实验成绩
计算机系制
《数据结构B》课程综合性实验报告
开课实验室:基础六 年 月 日
实验题目
哈夫曼编码的实现
一、实验目的
1、掌握线性链表的插入、删除等算法。
3、掌握Huffman树的概念及构造方法。
4、掌握二叉树的存储结构及遍历算法。
5、构造Huffman树及Huffman编码
二、设备与环境
微型计算机、Windows 系列操作系统 、Visual C++
三、实验内容
根据字符出现的频率情况,创建Haffman树,再将各字符对应的哈夫曼编码显示在屏幕上
四、实验结果及分析
实验过程(图):
赫夫曼编码树
seletemintwoval GenbinoryTree
子函数 子函数
HuffmanTree 生成赫夫曼树
输出权值 输出赫夫曼编码及实现了译码功能
测试截图:
代码分析:
#include<>
#include<>
#define MIN 50;
typedef struct Hnode{
char val;
int left;
int right;
int parent;
int weight;
int side;
int visted;
}Hnode;
Hnode H[60];
int index[2];
void seletemintwoval(int n) //选两个最小值
{
int i,j,min;
for(j=0;j<2;j++)
{
min=MIN;
for(i=0;i<n;i++)
{
if(H[i].visted==0&&H[i].weight<=min)
{
min=H[i].weight;
index[j]=i;
}
}
H[index[j]].visted=1;
}
}
int GenbinoryTree(int n) //用选出的两个结点构成二叉树
{
H[n].left=index[0];
H[n].right=index[1];
H[n].weight=H[index[0]].weight+H[index[1]].weight;