- 1、本文档共6页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
PAGE 1软件
PAGE 1
第
第 PAGE 1 页
哈夫曼树及其应用实验报告
实验 四 哈夫曼树及其的应用
一、实验目的
1.在二叉树基本操作的基础上,掌握对二叉树的一些其它操作的具体实现方法。
2.掌握构造哈夫曼树以及哈夫曼编码的方法。
3、熟练掌握哈夫曼树(最优二叉树)特征及其应用
二、实验内容
题目一、哈夫曼树和哈夫曼编码:
从终端输入若干个字符,统计(或指定)字符出现的频率,将字符出现的频率作为结点的权值,建立哈夫曼树,然后对各字符进行哈夫曼编码。
设计要求:
⑴ 哈夫曼殊和哈夫曼编码的存储表示参考教材事例
⑵ 在程序中构造四个子程序为
① int freqchar(char *text, HTree *t) /*统计字符出现的频率*/
② int createhtree(HTree *t) /*根据字符出现的频率建立哈夫曼树*/
③ void coding(HTree *t,int head_i,char *code)
/*对哈夫曼树进行编码*/
④ void printhtree(HTree *t,int head_i,int deep,int* path)
/*中序打印树*
三、实验步骤
㈠、数据结构与核心算法的设计描述
struct frequence//统计频率
{
char a;
int n;
}
typedef struct
{
unsigned int weight;// 用来存放各个结点的权值
unsigned int parent,lchild,rchild;//指向双亲、 孩子结点的指针
}HTNode,*HuffmanTree;//动态分配数组存储赫夫曼树
typedef char **HuffmanCode;
void Frequent()
void HuffmanCoding(HuffmanTree HT,HuffmanCodeHC,int *w,int n)
//w存放n个权值, 构造哈夫曼树p, 并求出哈夫曼编码hc
㈡、函数调用及主函数设计
Main()调用HuffmanTree()函数;
HuffmanTree()函数调用Frequent()函数
㈢ 程序调试及运行结果分析
以下是程序调试结果的截图及说明
上图是从终端输入一串字符,并把并且统计字符个数作为权值的运行结果。
上图是打印哈夫曼树运行结果
上图是输出哈夫曼编码的运行结果
㈣ 实验总结
哈夫曼编码是二叉树的具体应用,哈夫曼编码的实验不仅巩固了我对二叉树应用和理解,还加深了我对树的具体应用的理解,在实验过程中,刚开始对哈夫曼的编程没有头绪,突然发现自己书看的太少,并且对算法理解的不透彻,课后也没有好好复习所学知识。总的来说,哈夫曼树的操作我还不是很熟练,因此还要好好练习,才能真正理解哈夫曼树的应用,所以在课后,我还会好好练习树的使用。
四、主要算法流程图及程序清单
struct frequence//统计频率
{
char a;
int n;
}
typedef struct
{
unsigned int weight;// 用来存放各个结点的权值
unsigned int parent,lchild,rchild;//指向双亲、 孩子结点的指针
}HTNode,*HuffmanTree;//动态分配数组存储赫夫曼树
typedef char **HuffmanCode;
void Frequent()
{
frequence ch[27];
int i=0;
for(;i=26;i++)//初始化结构体数组
{
ch[i].n=0;
}
cout输入一串字符(输入#键结束输入):endl;
char c;
cinc;
bool flag;
while(c!=#)
{
i=1;
flag=false;
for(;i=ch[0].n;i++)
{
if(c==ch[i].a)
{
flag=true;
break;
}
}
if(flag)//已存在
{
ch[i].n++;
}
else//不存在
{
ch[0].n++;
ch[ch[0].n].n++;
ch[ch[0].n].a=c;
}
cinc;
}
for(int j=1;j=ch[0].n;j++)
{
coutch[j].a ch[j].nendl;
}
}
void Select(HuffmanTree HT,int i,int s1,int s2)
{
int j,k=1;
while(HT[k].parent!=0)
k++;
s1=
您可能关注的文档
- 学生成绩管理系统实验报告_2.doc
- 实验报告(电路分析).doc
- 数字钟实验报告_2.doc
- 信号与系统练习题库.doc
- 实验十三 灵敏电流计特性的研究.doc
- 教师关爱留守儿童心得体会.doc
- 实验二 单闭环不可逆直流调速系统实验.doc
- 振动实验报告(填写参考).doc
- 01实验报告模板(带评语).doc
- 实验心理学 实验报告_2.doc
- 大学生职业规划大赛《新闻学专业》生涯发展展示PPT.pptx
- 大学生职业规划大赛《应用统计学专业》生涯发展展示PPT.pptx
- 大学生职业规划大赛《音乐学专业》生涯发展展示PPT.pptx
- 大学生职业规划大赛《中医学专业》生涯发展展示PPT.pptx
- 大学生职业规划大赛《信息管理与信息系统专业》生涯发展展示PPT.pptx
- 大学生职业规划大赛《汽车服务工程专业》生涯发展展示PPT.pptx
- 大学生职业规划大赛《水产养殖学专业》生涯发展展示PPT.pptx
- 大学生职业规划大赛《市场营销专业》生涯发展展示PPT.pptx
- 大学生职业规划大赛《音乐表演专业》生涯发展展示PPT.pptx
- 大学生职业规划大赛《音乐学专业》生涯发展展示PPT.pptx
文档评论(0)