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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

本文(数据结构课程设计报告——哈夫曼编译器.doc)为本站会员(精品资料)主动上传,道客多多仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知道客多多(发送邮件至docduoduo@163.com或直接QQ联系客服),我们立即给予删除!

数据结构课程设计报告——哈夫曼编译器.doc

1、1数据结构课程设计设 计 说 明 书(题目)哈夫曼编译器起止日期: 2011 年 6 月 20 日 至 2011 年 6 月 27 日学 生 姓 名班 级学 号成 绩指 导 教 师 (签 字 )计算机与通信学院2011 年 6 月 23 日一、课题任务与说明1编辑一个哈夫曼编译器系统程序2问题描述设某编码系统共有 n 个字符,使用频率分别为w 1,w2,wn,设计一个不等长编码方案,使得该编码系统的空间效率最好。3.所具有的功能:(1) 为一字符文本编码功能:将一字符文本复制到指定的文本中,并保存到指定路径,让程序自动为它编码。2(2) 为部分字符编码功能:输入部分字符与对应的字符频率,让程序

2、为之编码(需注意输入格式) 。(3) 保存输出到文本功能:将编码结果输出到文本。(4) 输出保存文本信息功能:将功能 3 保存的文本信息输出到屏幕上,用于查看结果是否正确。4.设计要求(1)设计数据结构;(2)设计编码算法;(3)分析时间复杂度和空间复杂度。(4)字符和频度如下:字符 空格 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z频度 186 64 13 22 32 103 21 15 47 57 1 2 32 20 57 63 15 1 48 51 80 23 8 18 1 165.设计内容与步骤(1)选择合适的数据结构(2)结点

3、结构的设计(3)算法设计与分析(4)程序设计、实现、调试(5)课程设计说明书6.设计工作计划与进度安排(1)设计工作 4 学时(2)实现与调试 16 学时(3)课程设计说明书 4 学时二、算法设计Huffman 编码是一种可变长编码方式,是由美国数学家 David Huffman 创立的,是二叉树的一种特殊转化形式。编码的原理是:将使用次数多的代码转换成长度较短的代码,而使用次数少的可以使用较长的编码,并且保持编码的唯一可解性。Huffman 算法的最根本的原则是:累计的(字符的统计数字*字符的编码长度)为最小,也就是权值(字符的统计数字*字符的编码长度)的和最小。三、程序的功能设计3为实现系

4、统功能,本程序主要分为五个模块。它们分别为:1.初始化功能模块此功能模块的功能为从键盘接收字符集大小 n,以及 n 各字符和 n 个权值。2.建立哈弗曼树的功能模块此模块功能为使用 1 中或从一文本中得到的数据按照教材的构造哈夫曼树的算法构造哈夫曼树。3.建立哈夫曼编码与译码的功能模块此模块功能为读入相关的字符信息进行哈夫曼编码,并将译码结果输出,在必要时也可保存到文件中。其中各个函数的功能分别如下:notesave 函数用于保存输出的结果;hfmtree 函数用于建立结点哈夫曼树并输出最终结果;readnote 函数用于读取目标文本字符信息;4.流程图:四、函数编码及调试由于本人能力有限难免

5、不会在编码与调试过程中遇到这样或那样的问题,但通过长时间的改正,查询资料与询问,终于能将出现一些致命错误得以修正。例如:在输入编码结果信息时由于少了一个很不明显的 Getchar()的接收 Enter 的函数,后面的就全乱了使程序出现了不能达到意料之中的效果。还有先是运行完一个函数后就跳出了整个运行程序不能再继续,后来通过查阅界面结束main()Hfmtree() Exit()Readnote()Notesave() Main()4书籍,明白再主函数中加一个 For 语句就可以避免这一问题。第三个问题就是由于调用完一个函数后显示的信息还是留在运行界面,但它们的确有没什么用且占用界面,不美观,后

6、来通过询问同学得知,在每个要调用的函数后加一个 system(“cls“)语句就可达到清除上屏信息的功能。五、总结该程序主要用于哈夫曼编码,并在必要时保存数据。做法主要是用一个主函数 MAIN,用它达到显示欢迎界面,提示选择操作与调用其它函数功能(用到 Switch 函数) ,这样使得程序简单,易读,运行效果也好。但由于能力有限,该程序在时间与空间复杂度上有待作改正。参考文献:(1) 刘振鹏、张小莉等编著;数据结构(第二版).中国铁道出版社。(2) 石强、罗文浩等编著;数据结果习题解答与实验指导(第二版).中国铁道出版社。(3) 刘克成 主编;C 语言程序设计.中国铁道出版社。附全部代码(正常

7、运行 VC+6.0):#include#include#include#include#define MAXLEAF 27#define MAXNODE MAXLEAF*2-1#define MAXBIT 25#define MAXVALUE 20005#define H “tt =n“typedef structint parent;int weight;int lchild;int rchild;hfm_n;typedef structint bitMAXBIT;int start;hfm_c;void notesave(int n,char a,hfm_c hfm_code)FILE *

8、fp;int i=0,j;char c;if(fp=fopen(“d:notesave.txt“,“w“)=NULL)printf(“n Cannot open file!n“);getchar();exit(1);for(i=0;i“,fp);6for(j=hfm_codei.start+1;j“);for(i=0,c=0;i“,ai);for(j=hfm_codei.start+1;j路径 D: notesave (y/n)?“);ch1=getchar();getchar();if(ch1=y|ch1=Y)notesave(n,a,hfm_code);return NULL;int re

9、adnote()FILE *fp;int i,j,b26,s26,k;char a26,ch,ch1=n;memset(b,0,sizeof(b);if(fp=fopen(“d:note.txt“,“r“)=NULL)printf(“n Cannot open the file of note!“);printf(“n Please creat a new text!n“);10ch1=y;if(ch1=y)printf(“n 此功能你要做的只是将要编码的字符文本复制到下面文本并将它命名为 note 并 n 保存到-D:.n 需注意的是一定要是字符文本且文本保存路径是 D 盘下.n “);sy

10、stem(“notepad“);printf(“n 保存好文本后,请按任意键继续“);getchar();if(fp=fopen(“d:note.txt“,“r“)=NULL)printf(“n Open files fail!“);getchar();exit(1);while(ch=fgetc(fp)!=EOF)if(sizeof(ch)!=1) break;k=int(ch);if(k=65 j+;if(j%6=0) printf(“n“);hfmtree(j,a,s);return 1;void main()int i,h,n=0,b26;char a26,c30,ch,ch1;for

11、(;)printf(“nnntt n“);printf(“tt =* * * * * * * * * * * * * *=n“);printf(“tt =*欢迎使用本哈夫曼编码系统 !*输入格式应为: 字符+空格n =例如:a b c.n =对应的字符频率格式也应如此.n“);doprintf(“n 请输入叶子结点个数:“);if(scanf(“%d“,printf(“n Input worry!n Please input again.n“);else ch=n;getchar();13while(ch=s);doprintf(“n =请输入相应个字符:“);for(i=0;in;i+)ai

12、=getchar();ch1=getchar();if(ch1!=n) gets(c);printf(“n 请输入相应字符对应的频率:“);for(i=0;in;i+)scanf(“%d“,ch1=getchar();if(ch1!=n) gets(c);printf(“n 确认所有数据无误后请按Enter(否则按y)“);ch=getchar();while(ch=y|ch=Y);hfmtree(n,a,b);break;case 3: printf(“nnn“);printf(H);printf(“tttt 1 欢迎下次使用1n“);printf(H);printf(“tt“);return;case 4: printf(“nNotesave 中的信息:n“);system(“type d:notesave.txt“);break;default: printf(“tt a 输入有误!t“);getchar();break;printf(“n “);system(“pause“);14system(“cls“);

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报