“数据结构”实验三.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
PAGE 第 PAGE 1 页 共 NUMPAGES 1 页华北水利水电大学 数据结构 实验报告2015~2016学年 第 一 学期 2013级 计算机科学与技术专业班级: 2013156 学号: 201315607 姓名: 冯浩亮 实验三 树的应用实验题目:树的应用——哈夫曼编码实验内容:利用哈夫曼编码进行通信可以大大提高信道的利用率,缩短信息传输的时间,降低传输成本。根据哈夫曼编码的原理,编写一个程序,在用户输入结点权值的基础上求哈夫曼编码。从键盘输入若干字符及每个字符出现的频率,将字符出现的频率作为结点的权值,建立哈夫曼树,求出各字符的哈夫曼编码。要求:输出存放哈夫曼树的数组HT的初态和终态;输出每个字符的哈夫曼编码;输入由上述若干字符组成的字符串,对电文进行编码并输出;(选作)输入电文的哈夫曼编码,进行译码并输出。实验要求:使用C语言完成算法设计和程序设计并上机调试通过。撰写实验报告,提供实验结果和数据。写出算法设计小结和心得。程序源代码:#include stdio.h#include string.h#include stdlib.h#include memory.h#include conio.h#define INIT_CAPCITY 100struct HTNode //结点信息{ char c;//数据项 int parent;//双亲结点的位置 int lchild; int rchild; int weight;//权值};struct ChNode //定义一个结构体,用来存放字符串的各个字符和权值信息{ char c; int weight;};struct HCode{ char code[INIT_CAPCITY];//存放当前结点的哈夫曼编码 int m_start;//开始存放的位置};//创建哈夫曼树void CreateHT(HTNode ht[],int n,ChNode s[]){ int i,k,lnode,rnode;//lnode为最小权值结点的位置,rnode为次小权值结点的位置 int min1,min2;//min1为最小值,min2为次小值 for (i=0;i2*n-1;i++)//初始化 { ht[i].parent=-1; ht[i].lchild=-1; ht[i].rchild=-1; ht[i].weight=0; } for (i=0;in;i++) { ht[i].c=s[i].c; ht[i].weight=s[i].weight; } printf(哈夫曼树初态为:\n); printf(data weight parent lchild rchild\n); for (i=0;i2*n-1;i++) { printf(%-6c %-6d %-6d %-6d %-6d\n,ht[i].c,ht[i].weight,ht[i].parent,ht[i].lchild,ht[i].rchild); } for (i=n;i2*n-1;i++) { min1=min2=32767; lnode=rnode=0; for (k=0;k=i-1;k++) { if (ht[k].parent==-1) { if (ht[k].weightmin1) { min2=min1; rnode=lnode; min1=ht[k].weight; lnode=k; } else if (ht[k].weightmin2) { min2=ht[k].weight; rnode=k; } } } ht[lnode].parent=i; ht[rnode].parent=i; ht[i].weight=ht[lnode].weight+ht[rnode].weight; ht[i].lchild=lnode; ht[i].rchild=rnode; } printf(\n哈夫曼树终态为:\n); printf(data weight parent lchild rchild\n); for (i=0;i2*n-1;i++) { printf(%-6c %-6d %-6d %-6d %-6d\n,ht[i].c,ht[i].weight,ht[i].parent,ht[i].lchild,ht[i].rchild); } printf(\n);}//哈夫曼编码void CreateCode(HTNode ht[],HCode hcd[],int n){ int i,f,c; HCode hc; fo

文档评论(0)

xina171127 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档