哈夫曼树实验报告_2.doc

  1. 1、本文档共6页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 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=

文档评论(0)

134****4822 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档