哈夫曼编译码器课程设计java,哈夫曼编译码器课程设计报告(完整版).doc

41528d3028836879cd698677c3999917.gif哈夫曼编译码器课程设计报告(完整版).doc

XXX学院本科数据结构课程设计总结报告设计题目实验一、哈夫曼编/译码器学生姓名XXX系别XXX专业XXX班级XXX学号XXX指导教师XXXXXX2012年6月21日1XXX学院课程设计任务书题目一、赫夫曼编译码器专业、班级XXX学号XXX姓名XXX主要内容、基本要求、主要参考资料等1主要内容利用哈夫曼编码进行信息通信可大大提高信道利用率,缩短信息传输时间,降低传输成本。要求在发送端通过一个编码系统对待传数据预先编码;在接收端将传来的数据进行译码(复原)。对于双工信道(既可以双向传输信息的信道),每端都需要一个完整的编/译码系统。试为这样的信息收发站写一个哈夫曼的编/译码系统。2基本要求系统应具有以下功能(1)C编码(CODING)。对文件TOBETRANS中的正文进行编码,然后将结果存入文件CODEFILE中,将以此建好的哈夫曼树存入文件HUFFMANTREE中(2)D解码(DECODING)。利用已建好的哈夫曼树将文件CODEFILE中的代码进行译码,结果存入TEXTFILE中。(3)P打印代码文件(PRINT)。将文件CODEFILE以紧凑格式显示在终端上,每行50个代码。同时将此字符形式的编码文件写入文件CODEPRINT中。(4)T打印哈夫曼树(TREEPRINTING)。将已在内存中的哈夫曼树以直观的方式(树或凹入表形式)显示在终端上,同时将此字符形式的哈夫曼树写入文件TREEPRINT中。3参考资料数据结构(C语言版)严蔚敏、吴伟民编著;数据结构标准教程胡超、闫宝玉编著完成期限2012年6月21日指导教师签名课程负责人签名2012年6月21日2一、设计题目(任选其一)实验一、哈夫曼编/译码器二、实验目的1巩固和加深对数据结构的理解,提高综合运用本课程所学知识的能力;2深化对算法课程中基本概念、理论和方法的理解;3巩固构造赫夫曼树的算法;4设计试验用程序实验赫夫曼树的构造。三、运行环境(软、硬件环境)WINDOWSXPSP3,VISUALC60英文版四、算法设计的思想(1)初始化赫夫曼树,输入文件TOBETRANSTXT中各字符及其权值,并保存于HFMTREETXT文件中(2)编码(CODING)。对文件TOBETRANS中的正文进行编码,然后将结果存入文件CODEFILE中(3)D解码(DECODING)。利用已建好的哈夫曼树将文件CODEFILE中的代码进行译码,结果存入TEXTFILE中。(4)P打印代码文件(PRINT)。将文件CODEFILE以紧凑格式显示在终端上,每行50个代码。同时将此字符形式的编码文件写入文件CODEPRINT中。(5)T打印哈夫曼树(TREEPRINTING)。将已在内存中的哈夫曼树以直观的方式显示在终端上,同时将此字符形式的哈夫曼树写入文件TREEPRINT中。五、流程图3六、算法设计分析1赫夫曼树节点的数据类型定义为TYPEDEFSTRUCT{//赫夫曼树的结构体CHARCHINTWEIGHT//权值INTPARENT,LCHILD,RCHILD}HTNODE,HUFFMANTREE2VOIDHUFFMANCODINGHUFFMANTREE建立赫夫曼树的算法,此函数块调用了SELECT()函数。VOIDSELECTHUFFMANTREEHT,INTJ,INTX,INTY从已建好的赫夫曼树中选择PARENT为0,WEIGHT最小的两个结点。3.利用已建好的哈夫曼树从文件HFMTREETXT中读入,对文件中的正文进行编码,然后将结果存入文件CODEFILETXT中。4CODING编码功能对输入字符进行编码5DECODING译码功能利用已建好的哈夫曼树将文件CODEFILETXT中的代码进行译码,结果存入文件TEXTFILETXT中。46PRINT打印功能函数输出哈夫曼树以及对应的编码。七、源代码//INCLUDEINCLUDEINCLUDE//定义赫夫曼树结点的结构体TYPEDEFSTRUCT{CHARCH//增加一个域,存放该节点的字符INTWEIGHTINTPARENT,LCHILD,RCHILD}HTNODE,HUFFMANTREETYPEDEFCHARHUFFMANCODE//指向赫夫曼编码的指针VOIDTIPS//打印操作选择界面VOIDHUFFMANCODINGHUFFMANTREE//建立赫夫曼树的算法VOIDSELECTHUFFMANTREEHT,INTJ,INTX,INTY//从已建好的赫夫曼树中选择PARENT为0,WEIGHT最小的两个结点VOIDINITVOIDCODING//编码VOIDDECODING//译码VOIDPRINT_CODE//打印译码好的代码VOIDPRINT_TREE//打印哈夫曼树INTREAD_TREEHUFFMANTREE//从文件中读入赫夫曼树VOIDFINDHUFFMANTREE//5译码时根据01字符串寻找相应叶子节点的递归算法VOIDCONVERT_TREEUNSIGNEDCHART100100,INTS,INTI,INTJ//将内存中的赫夫曼树转换成凹凸表形式的赫夫曼树HUFFMANTREEHT//全局变量INTN0//全局变量,存放赫夫曼树叶子结点的数目INTMAIN{CHARSELECTWHILE1{TIPSSCANF“C“,SWITCHSELECT//选择操作,根据不同的序号选择不同的操作{CASE 1 INITBREAKCASE 2 CODINGBREAKCASE 3 DECODINGBREAKCASE 4 PRINT_CODEBREAK6CASE 5 PRINT_TREEBREAKCASE 0 EXIT1DEFAULTPRINTF“ERROR\N“}GETCHAR}RETURN0}VOIDTIPS//操作选择界面{PRINTF“\N“PRINTF“请选择操作\N“PRINTF“\N“PRINTF“\N“PRINTF“1初始化赫夫曼树\N“PRINTF“2编码\N“PRINTF“3译码\N“PRINTF“4打印代码文件\N“PRINTF“5打印赫夫曼树\N“PRINTF“0退出\N“PRINTF“\N“}7//初始化函数,输入N个字符及其对应的权值,根据权值建立哈夫曼树,并将其存于文件HFMTREE中VOIDINIT{FILEFPINTI,N,W52//数组存放字符的权值CHARCHARACTER52//存放N个字符PRINTF“\N输入字符个数N“SCANF“D“,//输入字符集大小PRINTF“输入D个字符及其对应的权值\N“,NFORI0ICHCHARACTERPWEIGHTWPPARENT0PLCHILD0PRCHILD0}FORICH0PWEIGHT0PPARENT0PLCHILD0PRCHILD0}FORIN1IINCLUDE//为EXIT提供原型INCLUDE//哈夫曼树结点的结构TYPEDEFSTRUCT{CHARCH//该字符域用于存放节点的关键字INTWEIGHTINTPAR

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值