数据结构课设报告+哈夫曼编译器+C语言+源码_第1页
数据结构课设报告+哈夫曼编译器+C语言+源码_第2页
数据结构课设报告+哈夫曼编译器+C语言+源码_第3页
数据结构课设报告+哈夫曼编译器+C语言+源码_第4页
数据结构课设报告+哈夫曼编译器+C语言+源码_第5页
已阅读5页,还剩21页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、 查看哈夫曼树.txt文件:_|吗去专利DC-记。R4时圻品iEj恰司口 =(Vj裙牛叩3611201669 7 9 7 891 3611201669 7 9 7 891 -字田 bcdef?f L选才1 1编码并输入待编码文件的路径:【1】编科 121译码 【。】退出民的选择是, 1着输入需要编码的文件路径:待编码,tKt回车进行编码:查看待编码和编码结果俩个文件进行验证:回车进行编码:查看待编码和编码结果俩个文件进行验证:.为窗稿txt本- X文件旧管旧格式查言M 第即(用 laaabbbccccddeeefff箫1行,?揖瞪各L61 -困寻-0 X灯我F)里鼻引 暗三空 谷&小 的1地|

2、000111001110011100111011110111101110110110111 III 111111101010选才 2译码并输入待译码文件的路径:【1】编码 【2】译码 10退出处的选择是,2请输入需要译码的文件路径:编码结果,宜上回车进行译码:鞠入霄要译码的文件路径:编1输果R t侍奉的文件巾的代涧为刃MniQOlLLKLnWllLCnill:LLlHmQl】ODlllLLnLllLLML01Ci丽4妁祜具是:w *仆限cce帚di gift已漏译旧结果存入文件,林名为:国马结果查看译码结果文件进行验证:商洋码结果.txt 记事本一 X文件旧福旧例;壹春M帮助归)laaabbb

3、cccdddeeeff f第1行毋一七、本次课程设计的心得体会本次课程设计的心得主要是在文件的相关操作的学习上,之前是没有怎么 学文件的相关操作,通过本次的课程设计,本人对C语言的文件的相关操作有了 相当的了解,并成功的完成了课程设计所要求的文件的读写功能,可以说是有很大的收获的,不仅仅是在文件操作的这一单方面。在完成一个课题之前,要仔细理解课题要求。我在此次课程设计中犯的最 严重的错误,应该算没有仔细审题。课题的要求是用读取文件的方式输入需要编 码字符,译码所需的编码代号也要用文本方式输入。我在拿到这个课题的时候, 因为没有仔细理解这些要求,就采用了键盘输入字符进行编码和译码的方式, 以致走

4、了不少弯路。另外,这次课程设计充分暴露了我的惰性思想。在拿到这个课题后,因为对 哈夫曼编码这个知识点理解比较到位,所以没花多少时间就完成了课题要求实现 的功能。然而,在此之后,我由于自我感觉良好和惰性,没有积极地去寻找改进 程序的方法,也没对程序运行的界面进行美化,使其拥有良好的用户使用体验。 最终在答辩的时候,交给老师的是一个界面简陋的程序。通过这次课程设计,我更加深入了理解了哈夫曼编码的过程,以及利用哈 夫曼编码对数据进行压缩的优越性,并且使我能够更熟练地运用树形的数据结 构。并且体会到了在学习中,要严格要求自己,不能因为一点点的成功就骄傲自 满,停止不前。八、附录:源程序清单#inclu

5、de #include #include #define MAXLEN 100 typedef struct int weight;int lchild;int rchild;int parent;char key;htnode;typedef htnode hfmtMAXLEN; int n;void inithfmt(hfmt t)/ 对结构体进行初始化int i;printf(n);printf(n);printf(I*输入区*n);printf(n 请输入字符集大小n=);scanf(%d,&n);getchar();for(i=0;i2*n-1;i+)/ 对结构体进行初始化ti.we

6、ight=0;ti.lchild=-1;ti.rchild=-1;ti.parent=-1;printf(n);void inputweight(hfmt t)/ 表示权值输入函数int w;/wint i;char k;/k表示获取的字符for(i=0;in;i+)printf(请输入第阶字符二i+1);scanf(%c,&k);getchar();ti.key=k;printf(请输入第阶字符的权值 二i+1);scanf(%d,&w);getchar();ti.weight=w;printf(n);void selectmin(hfmt t,int i,int *p1,int *p2)/

7、选中两个权值最小的函数long min1=999999;long min2=999999;int j;for(j=0;jtj.weight)min1=tj.weight;*p1=j;for(j=0;jtj.weight & j!=(*p1)/注意 j!=(*p1)min2=tj.weight;*p2=j;void creathfmt(hfmt t)/ 创建哈夫曼树的函数int i,p1,p2;inithfmt(t);inputweight(t);for(i=n;i2*n-1;i+)selectmin(t,i-1,&p1,&p2);tp1.parent=i;tp2.parent=i;ti.lch

8、ild=p1;ti.rchild=p2;ti.weight=tp1.weight+tp2.weight;void printhfmt(hfmt t)/ 打印哈夫曼树FILE *f1;char str10000;char *s;int i;if(f1=fopen( 哈夫曼树.txt,w)!=NULL)printf(n);s =nfprintf(f1,%s,s);printf(I*n);u*哈夫曼树关系结构printf(I*n);u*哈夫曼树关系结构哈夫曼树关系结构*n;fprintf(f1,%s,s);printf(tt权重 t 父母 t 左孩子 t 右孩子 t 字符 t);s = tt 权重

9、t 父母 t 左孩子 t 右孩子 t 字符 t;fprintf(f1,%s,s); for(i=0;i2*n-1;i+) printf(n);printf(tt%dt%dt%dt%dt%c,ti.weight,ti.parent,ti.lchild,t i.rchild,ti.key);fprintf(f1,ntt%dt%dt%dt%dt%c,ti.weight,ti.parent,ti.lc hild,ti.rchild,ti.key);printf(nn);n-n;fprintf(f1,%s,s);fclose(f1);printf( 已将哈夫曼树存入文件,文件名为:哈夫曼树nn);cha

10、r ch;FILE *f2;void hfmtpath(hfmt t,int i,int j)/int a,b;a=i;b=j=ti.parent;if(tj.parent!=-1)i=j;hfmtpath(t,i,j);if(tb.lchild=a)printf(0);fputc(0,f2);elseprintf(1);fputc(1,f2);编码的重要哈夫曼树路径递归算法void phfmnode(hfmt t)/ 对字符进行初始编码 int i,j,a;printf(nn);printf(*); printf(ntt 字符 t 权值 t for(i=0;in;i+)哈夫曼编码编码结果 )

11、;j=0;printf(n);printf(tt%ct%dt,ti.key,ti.weight);hfmtpath(t,i,j);printf(nn);void encoding(hfmt t)/ 对用户输入的文件的内容进行编码FILE *f3;char r1000,h1000;/ 用来存储输入的字符串int i,j;printf(nn 请输入需要编码的文件路径:);gets(h);f3=fopen(h,r);fgets(r,1000,f3);printf(n 待编码文件正文内容为:%sn,r);printf( 编码结果为:);for(j=0;rj!=0;j+)for(i=0;in;i+)if

12、(rj=ti.key)hfmtpath(t,i,j);fclose(f3);nn);printf(nn 已将编码结果存入文件,文件名为:编码结果nn);FILE *f5;void decoding(hfmt t)/ 对用户输入的密文进行译码FILE *f4;char r1000,h1000;int i,j,len;j=2*n-2;/j 初始从树的根节点开始printf(nn 请输入需要译码的文件路径:);gets(h);f4=fopen(h,r);fgets(r,1000,f4);len=strlen(r);printf(n 待译码文件中的代码为:%sn,r);printf( 译码的结果是:)

13、;/f5=fopen( 译码结果.txt,w);for(i=0;ilen;i+)if(ri=0)j=tj.lchild;if(tj.lchild=-1)printf(%c,tj.key);fputc(tj.key,f5);j=2*n-2;else if(ri=1)j=tj.rchild;if(tj.rchild=-1)printf(%c,tj.key);fputc(tj.key,f5);j=2*n-2;fclose(f4);/fclose(f5);printf(nn 已将译码结果存入文件,文件名为:译码结果nn);int main()int i,j;hfmt ht;char flag;prin

14、tf( printf( printf( printf( printf( printf( printf( creathfmt(ht);|n);int main()int i,j;hfmt ht;char flag;printf( printf( printf( printf( printf( printf( printf( creathfmt(ht);|n);*信安 1401- 孙毅-CSU |n);|n);哈夫曼编码课程设计|n);|n);完成时间:2016/10/26 |n);|n);printhfmt(ht);phfmnode(ht);printf(nn);printf(*编码&译码&退出&保存*);printf(n 【 1】编码t 【 2】译码 t 【 0】退出);printf(n 您的选择是:);flag=getchar();getchar();while(flag!=0)if(flag=1)编码结果.txt,wt);译码结果编码结果.txt,wt);译码结果.txt,wt);f2=fopen( encoding(ht); fclose(f2);else if(flag=2)f5=fopen( decodin

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论