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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

哈弗曼压缩软件数据结构试验报告附源程序.docx

1、哈弗曼压缩软件数据结构试验报告附源程序XXX學院数据结构课程设计报告题 目: 基于哈夫曼编码的压缩软件 系部名称:计算机专业名称:软件工程班 级:0802学号:XXXXXX学生姓名 :稻草人指导教师:XXXXX时间:2010 XX-2010 YY一、课程设计目的 通过运用哈夫曼树的知识编写该压缩与解压软件,能使学生将所学的理论知识应用起来,有效地运用到解决实际问题中去,提高学生的自身的编程能力,从而达到学以致用的目的。二、课程设计内容 1应用系统分析,建立该系统的功能模块框图及界面的组织和设计; 2分析系统中的各个函数及它们之间的关系; 3根据问题描述,设计系统的结构体及各个函数; 4设计哈弗

2、曼树的构造算法和哈弗曼编码算法; 5完成设计的系统各个应用模块; 6将各个模块整合进行功能测试。三、需求分析哈弗曼压缩软件1.需求分析目的 为明确软件需求、安排项目规划与进度、组织软件开发与测试,供设计人员、开发人员参考。 2. 项目开发计划 时间开发内容6月22日读取文本文件,并统计文件中字母个数6月23日建立huffman树对文件,进行huffman编码6月24日压缩6月25日解压缩 3. 任务目标 能比较完善的对txt文件进行压缩和解压缩。 4. 数据字典 名称:字符频率 别名:weight 描述:读取文本文件,并统计文件中字母个数 定义:字符频率 = 字符 + 数量 名称:结点 别名:

3、HTNode 描述:建立huffman树的叶子和非叶子结点定义:结点 = 数量 + 字符 + 双亲结点 + 左孩子结点 + 右孩子结点 位置:编码文件 5. 功能划分 压缩 解压缩四、概要设计哈弗曼压缩软件1 建立哈夫曼树。根据哈夫曼编码技术,可以将已经给出的字母的使用频率建立一个哈夫曼树,即以二叉树的形式将英文字母和空格存储。2 编码。利用二叉树的遍历知识,左孩子用“0”表示,右孩子用“1”表示,将输入的一组英文句子进行编码。3测试和输出。程序要求的测试的英文句子是:“knowledge is power”,输出每一个字母然后给出相应的哈夫曼编码。本程序输入字母以“#”结束。4译码。本程序要

4、求对已编码的数字能够给以反编码。 .函数调用示意图六、调试情况,设计技巧及体会1测试结论 能较好地进行压缩和解压 不足的是对最后所补的0未处理,解压会多出几个字符。2. 设计技巧本软件可对字母、汉字可以实现共同压缩,压缩率在50%以上,压缩后对哈夫曼树进行保存,以便后面解压,对叶子结点只保存其字符、左孩子、右孩子,对非叶子结点保存左孩子和右孩子。解压时从根结点开始,利用哈夫曼树进行解压,遇到0,找左孩子,遇到1找右孩子,到叶子结点时,输出字符。3心得体会: 通过这次课题实验的程序实践,我实在获益匪浅!数据结构是上个学期开展的一门学科,学习好这门学科是非常重要的,在以后的程序设计方面这门学科能给

5、我们很大的帮助。同时,学习这门学科也是艰辛的,因为它比较难懂,这不仅需要我们要发挥我们的聪明才志,还需要我们在不断的实践中领悟。这次的程序设计对我来说无疑是一个具大的考验,从接起课题后,我就一直为实现程序而努力,翻阅相关书籍、在网上查找资料。因为开始时基础不是很好,过程中遇到了不少的阻碍,编写程序的进度也比较慢。虽然如此,但是通过自己的努力与老师的指导,我对这次实验的原理有了一定的理解,通过参照从网上找到的源程序,终于在其它源程序的基础下写出了本次实验的核心算法,并使其能够正常的运行。这一个多月的设计工作,让我体会到了作为一个编程人员的艰难,一个算法到具体实现,再到应用层面的开发是需要有一段较

6、长的路要走的,不是一朝一夕就可以实现的,而且在编好程序后,编程人员还要花很多的时间去完善它,其中包含的心酸,外人是不会明白的。非常感谢在背后一直给我指导的老师和同学,他们的支持和鼓励让我在遇到挫折时能够站起来战胜它,也让我走到了今天这一步,完成了实验的设计。今后,我会更加努力的学习专业知识,提高自我的能力。七、参考文献c语言程序设计谭浩强主编八、附录:源代码#include#include#include#include#includetypedef struct word char word3; unsigned long times; struct word *next; word,*wo

7、rd_list;typedef struct Tnode unsigned long weight; char word3; long parent,lchild,rchild; Tnode,HuffTree;HuffTree ht5000;char *hc5000;int n=0;void stat(word_list head,char *filename) FILE *fp; char ch3; int flag=0; word *p,*q,*s; fp=fopen(filename,rt); if(fp=NULL) printf(n无法打开要压缩的文件,或该文件不存在!); p=hea

8、d; while(ch0=fgetc(fp)!=EOF) if(ch0254) ch1=fgetc(fp); ch2=0; else ch1=0; if(ch0=10) strcpy(ch,-n); if(ch0=32) strcpy(ch,-t); for(q=head-next;q!=NULL;q=q-next) if(!strcmp(q-word,ch) (q-times)+; flag=1; break; if(flag=0) s=(word *)malloc(sizeof(word); strcpy(s-word,ch); s-times=1; p-next=s; p=s; p-ne

9、xt=NULL; +n; flag=0; p-next=NULL; fclose(fp); return;void protect1(char *filename) FILE *fp2; char ch26=编码:; int i; strcat(ch,filename); fp2=fopen(ch,wt); if(fp2=NULL) printf(n编码文件无法创建!); exit(1); for(i=1;i=2*n-1;i+) fprintf(fp2,%s %ld %ld %ldn,hti.word,hti.parent,hti.lchild,hti.rchild); fclose(fp2)

10、; return;void out(char *filename) FILE *fp2; char ch26=编码:; int i; strcat(ch,filename); fp2=fopen(ch,rt); if(fp2=NULL) printf(n编码文件无法打开!); exit(1); for(i=1;!feof(fp2);i+) fscanf(fp2,%s %ld %ld %ldn,hti.word,&hti.parent,&hti.lchild,&hti.rchild); n=i; fclose(fp2); return;void sort() int i,j; unsigned

11、long min; char ch3; for(i=1;in;i+) for(j=i+1;jhtj.weight) min=htj.weight; htj.weight=hti.weight; hti.weight=min; strcpy(ch,hti.word); strcpy(hti.word,htj.word); strcpy(htj.word,ch); return;void select(int t,int *s1,int *s2) int i; unsigned long min1,min2; min1=min2=4294967295; *s1=*s2=0; for(i=1;i=n

12、;i+) if(hti.parent=0) if(hti.parent=0)&(hti+1.parent=0)&i+1=n) min1=hti.weight; *s1=i; min2=hti+1.weight; *s2=i+1; break; else min1=hti.weight; *s1=i; break; for(i=n+1;i=t;i+) if(hti.weightmin1&hti.parent=0) min2=min1; *s2=*s1; min1=hti.weight; *s1=i; continue; else if(hti.weightnext;inext) hti.weig

13、ht=p-times; strcpy(hti.word,p-word); hti.parent=hti.rchild=hti.lchild=0; m=2*n-1; for(i=n+1;i=m;i+) hti.parent=hti.rchild=hti.lchild=hti.weight=0; sort(); for(i=n+1;i=m;i+) select(i-1,&s1,&s2); strcpy(hti.word,无); hti.weight=hts1.weight+hts2.weight; hts2.parent=hts1.parent=i; hti.lchild=s2; hti.rchi

14、ld=s1; return;void ctrHuffmancode() char *cd; int c,p,start,i; cd=(char *)malloc(n+1)*sizeof(char); cdn=0; for(i=1;i=n;i+) start=n; c=i; p=hti.parent; while(p!=0) -start; if(htp.lchild=c) cdstart=0; else if(htp.rchild=c) cdstart=1; c=p; p=htp.parent; hci=(char *)malloc(n-start)*(sizeof(char); strcpy

15、(hci,&cdstart); free(cd); return;void compress(char *filename,char *filename1) FILE *fp1,*fp2; int t,i=0,j=0,sum=0; char ch3, tr8; unsigned char c; fp1=fopen(filename,rt); if(fp1=NULL) printf(n无法打开 %s 文件,或该文件不存在!,filename); exit(0); fp2=fopen(filename1,wb); if(fp2=NULL) printf(n无法创建 %s 文件!,filename1

16、); exit(0); system(cls); printf(nnnnnnnn 压缩中,请稍候.); while(ch0=fgetc(fp1)!=EOF) if(ch0254) ch1=fgetc(fp1); ch2=0; else ch1=0; for(t=1;t=n;t+) if(ch0=10&ch1=0) strcpy(ch,-n); if(ch0=32&ch1=0) strcpy(ch,-t); if(!strcmp(htt.word,ch) while(j=7) for(;*(hct+i)!=0;i+,j+) trj=*(hct+i); if(j=7) sum=(tr7-48)*1

17、+(tr6-48)*2+(tr5-48)*4+(tr4-48)*8+(tr3-48)*16+(tr2-48)*32+(tr1-48)*64+(tr0-48)*128; c=(unsigned char)sum; fputc(c,fp2); j=0; i+; break; if(*(hct+i)=0) i=0; t=n+1; break; if(j=7&j!=0) for(;j=0;i-) mi=c%2; flag=c=c/2; if(i=0|c=0) break; if(unsigned char)ch=0;i-) mi=0; if(i=0) break; for(j=i;jnext=NULL

18、; while(1) system(cls); printf(nnnnn *); printf(nn 请选择您要执行的操作:nn 1.压缩文件nn 2.解压文件nn 3.退出n); printf(nn *); flushall(); choise=getch(); switch(choise) case 1: system(cls); printf(nnnnnnnn 请输入要压缩的文件名:); flushall(); scanf(%s,filename); printf(nn 请输入压缩后的文件名:); flushall(); scanf(%s,filename1); stat(head,fi

19、lename); ctrHuffTree(head); ctrHuffmancode(); protect1(filename1); compress(filename,filename1); break; case 2: system(cls); printf(nnnnn 请输入要解压的文件名:); flushall(); scanf(%s,filename1); printf(n 请输入解压后的文件名:); flushall(); scanf(%s,filename2); out(filename1); re_compress(filename1,filename2); break; case 3: exit(1); printf(nn ); default: system(cls); printf(n您的选择有误!); break; pr

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

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