- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
数据结构赫夫曼编译码器
院 系: 计算机科学学院
专 业: 计算机科学与技术
年 级: 2008
课程名称:
学 号:
姓 名:
指导教师:
2010年6月 2日
年级 ?2008 班号 01
?学号 专业 计算机科学与计术 ?姓名 实验名称 哈弗曼编/译码器 实验
类型 设计型 综合型 创新型
√ 实
验
目
的
或
要
求 一个完整的系统应具有以下功能:
I:初始化。从终端读入字符集大小n, n个字符和n个权值,建立哈弗曼树,并将它存于文件hfmTree.
E:编码。利用已建好的树,对文件ToBeTran中的正文进行编码,然后将结果存入CodeFile中。
D:译码。利用已建好的哈夫曼树将文件CodeFile中的代码进行译码,结果存入文件TextFile中。
P:印代码文件。将文件CodeFile以紧凑格式显示在终端上,每行50个代码。同时,将此字符形式的哈夫曼树写入文件TreePin中。
T:印哈弗曼树。将哈夫曼树以直观的方式显示在终端上,同时将此树写入文件TreePrint中。 实
验
原
理
(
算
法
流
程
) 一.算法流程
①建立HuffmanTree
void HaffmanTree::Haffman(int weight[],HaffmanTree HT[])
a.查找哈夫曼链表中两个权值最小的节点:
b.创建哈弗曼树
②哈夫曼编码和译码
void HaffmanTree::HaffmanCode(HaffmanTree haffTree[], HaffmanTree HaffCode[],char ch[],string s)
⑦解码函数:DeCoding(char code[],HFMTree HT,char str[],char[]) s
二.哈夫曼编码的算法
(1)字符集编码的存储结构及其算法描述
typedef struct {
char ch; //存储字符
char bits[n+1]; //存放编码位串
}CodeNode;
typedef CodeNode HuffmanCode[n];
void CharSetHuffmanEncoding(HuffmanTree T,HuffmanCode H)
{//根据哈夫曼树T求哈夫曼编码表H
int c,p,i;//c和p分别指示T中孩子和双亲的位置
char cd[n+1]; //临时存放编码
int start; //指示编码在cd中的起始位置
cd[n]=\0; //编码结束符
for(i=0,in,i++){ //依次求叶子T[i]的编码
H[i].ch=getchar();//读入叶子T[i]对应的字符
start=n; //编码起始位置的初值
c=i; //从叶子T[i]开始上溯
while((p=T[c].parent)=0){//直至上溯到T[c]是树根为止
//若T[c]是T[p]的左孩子,则生成代码0;否则生成代码1
cd[--start]=(T[p).1child==C)?0:1;
c=p; //继续上溯
}
strcpy(H[i].bits,cd[start]); //复制编码位串
}//endfor
}//CharSetHuffmanEncoding
三.文件的编码和解码
有了字符集的哈夫曼编码表之后,对数据文件的编码过程是:依次读人文件中的字符c,在哈夫曼编码表H中找到此字符,若
H[i].ch=c,则将字符c转换为H[i].bits中存放的编码串。
对压缩后的数据文件进行解码则必须借助于哈夫曼树T,其过程是:依次读人文件的二进制码,从哈夫曼树的根结点(即T[m-1])出发,若当前读人0,则走向左孩子,否则走向右孩子。一旦到达某一叶子T[i]时便译出相应的字符H[i].ch。然后重新从根出发继续译码,直至文件结束。
实
验
结
果
分
析
及
心
得
体
会 测试数据:利用教科书例6-2中的数据调试程序,并设第1到第8个字符为 a,b,c,d,e,f,g,h。
运行结果图:
运行结果分析:
通过调试发现该程序满足哈弗曼树,哈弗曼编码与译码的基本要求,满足课程设计任务的基本功能与要求。在以后的学习中希望能将程序进一步优化,思想更简单明了,使程序变得更完善。
心得体会
通过一周的编程设计使我对哈夫曼树以及哈夫曼编码有了更深的认识和理解,也使我更加明白哈夫曼编码译码在信息技术中的重要性和地位。
通过对数据结构和课程设计的学习,使我们能够以问题求解
您可能关注的文档
最近下载
- 三一SY235C9I2KS维护保养手册.pdf VIP
- 纪念中国人民抗日战争暨世界反法西斯战争胜利80周年PPT课件.pptx VIP
- 陶瓷原料及配方基础.ppt VIP
- 茶小绿叶蝉的防治课件.pptx VIP
- 电梯制造与安装安全规范 GB7588-2003.docx VIP
- 2023民航特种车辆操作工民航特种车辆操作工试卷(练习题库).docx VIP
- IEC 60840-2004 额定电压30kV(Um=36kV)以上至150kV(Um=170kV)挤包绝缘电力电缆及其附件试验方法和要求(中文).pdf VIP
- 22G101 三维彩色立体图集.docx VIP
- 混凝土混凝土.ppt VIP
- 沈萍微生物课件第3章b.ppt VIP
文档评论(0)