完整word版哈夫曼编码译码课程设计报告

上传人:汽*** 文档编号:561518314 上传时间:2022-10-14 格式:DOC 页数:30 大小:2.15MB
返回 下载 相关 举报
完整word版哈夫曼编码译码课程设计报告_第1页
第1页 / 共30页
完整word版哈夫曼编码译码课程设计报告_第2页
第2页 / 共30页
完整word版哈夫曼编码译码课程设计报告_第3页
第3页 / 共30页
完整word版哈夫曼编码译码课程设计报告_第4页
第4页 / 共30页
完整word版哈夫曼编码译码课程设计报告_第5页
第5页 / 共30页
点击查看更多>>
资源描述

《完整word版哈夫曼编码译码课程设计报告》由会员分享,可在线阅读,更多相关《完整word版哈夫曼编码译码课程设计报告(30页珍藏版)》请在金锄头文库上搜索。

1、计算机与信息工程系实践环节名称报告专业:计算机科学与技术班级: *学号: *姓名:杨明英报告完成日期:2011/6/10指导教师: *评语:成绩:批阅教师签名:批阅时间:目录1问题描述12 基本要求13数据结构14总体设计15详细设计25.1void main()25.2void jianliwenjian()35.3void luruyuanwen()45.4void chuangjian()55.5void bianma()65.6void yiwen()75.7void baocunyiwen()85.8void duquyuanwen()95.9void duqubianma()105

2、.10void duquyiwen()116测试与调试117源程序清单88 实验心得281. 问题描述打开一篇英文文章,统计该文章中每个字符出现的次数,然后以它们作为权值,设计一个哈夫曼编 / 译码系统 。2.基本要求以每个字符出现的次数为权值,建立哈夫曼树,求出哈夫曼编码,对文件yuanwen中的正文进行编码,将结果存到文件yiwen 中,再对文件 yiwen 中的代码进行译码,结果存到 textfile中。3.数据结构charCHN;/记录原文字符数组charYWN;/ 记录译文字符数组typedef char * Hcodem+1; / 存放哈夫曼字符编码串的头指针的数组 typedef

3、 structchar a;int num;dangenode;/ 记录单个字符的类别和出现的次数typedef structdangenode bm;int tag;jilunode;/ 统计原文出现的字符种类和数量typedef struct node/ 静态三叉的哈夫曼树的定义intweight;/结点的权值intparent;/双亲的下标intLchild;/左孩子结点的下标intRchild;/ 右孩子结点的下标htnode,hnM+1;/ hn 是结构数组类型,0 号单元不用4. 总体设计功能函数模块划分void main()/主函数void jianliwenjian()/建立存

4、储原文的文件 yuanwenvoid luruyuanwen()/通过程序录入原文到文件yuanwen 中void min_2(hn ht,int n,int *tag1,int *tag2)/选择权值较小的两个结点void chuangjian(jilunode * jilu,hn ht)/建立哈夫曼树void bianma(jilunode * jilu,hn ht,Hcode hc,int n)/ 对原文进行编码void bianmabaocun(Hcode hc,jilunode * jilu)/保存编码在文件 yiwen 中void yiwen(Hcode hc,jilunode *

5、 jilu)/ 读取 yiwen 中的编码,并将其翻译为原文void baocunyiwen()/将翻译的译文保存到文件textfile 中void duqubianma()/在编码文件 yiwen 中读取编码void duquyiwen()/从文件 textfile 中读取译文15. 详细设计5.1 主函数void main()开始Int tep=1;Ntep=1YNa=1YYNjianliwenjian();a=2NYa=3N luruyuanwen();Yc=1chuangjian(jilNNYu,humtree);a=4c=1tep=0;Ybianma(jilu,hYNtep=0; u

6、mtree,hc,jilua=5system(cls);yiwen(hc-tag);,jilu);YNsystem(cls);Bianmabaocduquyuanwen();a=6break;un(hc,jiolu); baocunyiwen();YNbreak;NNNduqubianma();a=7c=1c=1Yc=1Ytep=0; Ytep=0;YNduquyiwen();c=1Nsystem(cls);tep=0;a=8system(cls);YNtep=0; c=1break;system(cls);Ybreak;Ytep=0;break;system(cls);break;syste

7、m(cls);结束25.2 建立文件void jianliwenjian()首先,要建立一个文件来存储原文,在这里文件的名称按要求默认为 yuanwen,文件建立时有可能成功,有可能失败,建立失败时输出“ Cannot open file ”,成功后会提示:“文件已建立,名称为 yuanwen”。开始printf( 现在建立文件,以存储原文(文件名称默认为“ yuanwen”)n);N(fp=fopen(yuanwen,wb)=NULLYprintf(Cannot open filen);printf( 文件已建立 ,名称为: yuanwen);结束35.3 输入原文void luruyuan

8、wen()输入原文时首先要打开原文件,成功打开文件后逐个读取输入的字符存放到文件中,直到遇到结束标志 ,然后关闭文件。开始charch;(fp=fopen(yuanwen,wb)=NULLNYprintf(Cannot open filen);printf( 请输入原文(结束标志为: “ ”)n);ch=getchar();fputc(ch,fp)Ych!=Ngetchar();结束45.4 创建哈夫曼树void chuangjian()打开存储原文的文件 yuanwen,将字符逐个读出,然后统计字符的种类,类别和数量,最后建立静态的三叉链表来建立哈夫曼树,树中的叶子结点对应出现的个字符。开始

9、N打开文件 yuanwenYN文件未结束Y将文件中的字符逐个赋给数组CHi用栈 jilunode记录字符的种类、类别及数量关闭文件输出统计结果建立哈夫曼树结束55.5 编码void bianma()该函数实现对哈夫曼树的编码,先申请一个能存储字符编码的临时空间 cd,编码从哈夫曼树的叶子结点开始,寻找其父母结点,然后根据父母结点判断孩子结点的左右位置,左边置 1,右边置 0,并将 1,0 这样的字符从后往前逆序存放在 cd 中,每求得一个叶子结点的编码,就将其复制到存储哈夫曼编码的头指正数组中,找完叶子结点的编码后就释放临时空间cd。开始申请存放编码的字符空间cdN叶子结点的父母不为0Y对哈夫曼树的叶子结点编码将叶子结点的编码存放在cd中将 cd中存放的编码复制到存储哈夫曼编码的头

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 资格认证/考试 > 自考

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号