ImageVerifierCode 换一换
格式:DOCX , 页数:22 ,大小:236.96KB ,
资源ID:17747761      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/17747761.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(数据结构课程设计哈夫曼树及编码Word文档下载推荐.docx)为本站会员(b****4)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

数据结构课程设计哈夫曼树及编码Word文档下载推荐.docx

1、s2) 找出每次最小的两个权值最小的权值。Status HuffmanCoding(HuffmanTree &HT, HuffmanCode &HC, int *w, int n)构造赫夫曼树并构造每个字母的赫夫曼编码。void PrintHT(HuffmanTree HT, int n)输出赫夫曼树的存储结构。3. 详细设计 int min(HuffmanTree HT, int i)int j, flag = 1; unsigned int k = 10000; for(j = 1; j = i; j+) if(HTj.weight s2) j = s1; s1 = s2; s2 = j;

2、 int s1, s2, i, start, f; char *cd; HuffmanTree p = NULL;/p是工作指针,指向赫夫曼树中的结点 if(n 待构造的赫夫曼树共有2 %d - 1 = %d个结点n, n, m); if(!(HT = (HuffmanTree)malloc(m + 1) * sizeof(HTNode)/申请赫夫曼树结点占用的内存空间,0号单元不用 exit(OVERFLOW);赫夫曼树共分配了%d个结点空间,其中包含一个不用的0号单元n, m + 1); /printf(初始化所有叶子节点的权值,父亲和孩子:n); for(p = HT + 1, i =

3、1; i weight = *w;parent = 0;/双亲初始值为0,表示此结点还没有被选择最小的算法选择过lchild = 0;/左右孩子初始化为0,表示空rchild = 0; for(;= m; i+, p+)weight = 0; for(i = n + 1; +i) Select(HT, i - 1, s1, s2); HTs1.parent = i;/选出的两个权值最小的结点的双亲就是即将生成的结点 HTs2.parent = i; HTi.lchild = s1;/即将生成的结点左孩子是s1,右孩子是s2, HTi.rchild = s2;/因为s1比s2先选,因此s1总是小

4、于等于s2 HTi.weight = HTs1.weight + HTs2.weight;/即将生成结点的权值就是两个权值最小的结点的权值之和(HC = (HuffmanCode)malloc(n + 1) * sizeof(char *)(cd = (char *)malloc(n * sizeof(char) cdn-1 = 0; for(int i = 1; start = n - 1; for(int c = i, f = HTi.parent; f != 0; c = f, f = HTf.parent) if(HTf.lchild = c) cd-start = 0 else /叶

5、子结点根结点的右孩子1 /else(HCi = (char *)malloc(n - start) * sizeof(char) strcpy(HCi, &cdstart);叶子节点%d的赫夫曼编码为:%sn, i, HCi); free(cd); return OK;/HuffmanCodingn+-+n| 赫夫曼树HT的存储结构 |n+-+-+-+-+-+n| 结点编号 | weight | parent | leftchild | rightchild |n i+)| %4d | %4d | %4d | %4d | %4d |n, i, HTi.weight, HTi.parent, H

6、Ti.lchild, HTi.rchild);for(int i = 0; len; if(stri = A) a65+; else if(stri = B a66+;C a67+;D a68+;E a69+;F a70+;else if(stri = G a71+;H a72+;I a73+;J a74+;K a75+;L a76+;M a77+;N a78+/部分统计字母代码主程序首先随机输入一篇英文文章,再统计各字母个数,再调用HuffmanCoding(HT, HC, w, n)函数,此函数又会调用void Select(HuffmanTree HT, int i, int &s2)函

7、数,而此函数又会调用int min(HuffmanTree HT, int i)函数,构造完成后便调用PrintHT(HT,n)函数输出赫夫曼树的存储结构。 调用输入界面:输出界面:4. 调试分析 (a)调试过程中未设计多种不合理输入的对应输出结果,后加上。(b)算法的时间复杂度为O(n3), Status HuffmanCoding(HuffmanTree &HC, int *w, int n)函数中的一重for循环调用了select函数,而select函数又调用了min函数,故共有三重for循环,故时间复杂度为O(n3)。(c) 经过这次课程设计,让我受益匪浅,使我掌握了二叉树的的存储结构

8、和赫夫曼编码的基本思想。程序中有多处运用了三重循环,这里很多地方能够优化以达到减小时间和空间复杂度。在此次课程设计的最大收获就是让我明白一个道理:无论你做的是多么小的一个程序或软件,都要使用模块化设计,这样使程序实现的功能更清晰明了。5. 用户使用说明 直接输入一篇英文文章即可。6. 测试结果 a. 正确输入:ThereisnodoubtthatInternethaschangedourlifegreatlyItmakestheworldsmallerPeoplecangettoknowtheworldinashorttimeandmakefriendsfromallovertheworldW

9、hileontheotherhandthemuchattentionontheInternetisolatesthedistanceandreducesfacetofacecommunicationManyyearsagobeforethepopularityofcomputerpeoplegottoknowtheworldbylisteningtotheradioorreadingnewspaperButnowadayspeoplecanjustreadtheinstantnewsontheInternetandgetthefirsthandinformationimmediatelyThe

10、fastwaytomasterinformationmakesthemfeelkeepingintouchwiththeworldTheworldseemssoneartothem 结果:b错误的输入7. 测试情况: 测试情况如设计的一致,首先输出各字母及在文章出现的次数,再输出各字母的赫夫曼编码,最后输出ASCLL码与赫夫曼编码的差异。附程序源代码:#include stdlib.hstring.h#define OVERFLOW -2#define OK 1#define ERROR 0typedef int Status; /动态分配数组存储赫夫曼树 /动态分配数组存储赫夫曼编码表 in

11、t j, flag = 1;int main() HuffmanTree HT; HuffmanCode HC; int *w; char str10005; int a150,b60; memset(a,0,sizeof(int)*150);请随机输入英文文章: scanf(%s,str); int len = strlen(str); for(int i = 0; a78+;O a79+;P a80+;Q a81+;R a82+;S a83+;T a84+;U a85+;V a86+;W a87+;X a88+;Y a89+;Z a90+;a a97+;b a98+;c a99+;d a100+;e a101+;f a102+;g a103+;h a104+;i a105+; else if(

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1