哈夫曼树的应用数据结构课程设计样本.doc
《哈夫曼树的应用数据结构课程设计样本.doc》由会员分享,可在线阅读,更多相关《哈夫曼树的应用数据结构课程设计样本.doc(31页珍藏版)》请在咨信网上搜索。
1、资料内容仅供您学习参考,如有不当之处,请联系改正或者删除。 数据结构课程设计报告 题 目: 哈夫曼树应用 学生姓名: 谢辉 学 号: 17010201 专业班级: 计科13102 同组姓名: 赵丽娜 指导教师: 徐晓蓉 设计时间: 下学期第18周 指导老师意见: 评定成绩: 签名: 日期:目录一、 需求分析21.分析问题22.确定解决方案23.输入的形式和输入值的范围34.输出的形式35.程序所能达到的功能3二、 概要设计41. 主程序的流程图: 42程序中数据类型的定义: 43各程序模块之间的层次(调用)关系: 4三、 详细设计51哈夫曼树存储及类的定义: 52.哈夫曼树的基本操作:63.主
2、函数7四、 调试分析和测试结果.91.测试数据及其输出结果: 92.调试过程中遇到的问题及解决办法:13五、 总结14六、 参考文献14七、 致谢14八、 附录14一、 需求分析1. 分析问题 利用哈夫曼编码进行通信能够大大提高信道利用率, 缩短信息传输时间, 降低传输成本。可是, 这要求在发送端经过一个编码系统对待传数据预先编码, 在接收端将传来的数据进行译码( 复原) 。对于双工信道( 即能够双向传输信息的信道) , 每端都需要一个完整的编/译码系统。为这样的信息收发站写一个哈夫曼码的编/译码系统。2. 确定解决方案设计建立带权的哈夫曼树, 确定哈夫曼树的类与成员函数, 以及各函数之间的调
3、用关系, 采用动态数组的存储结构存储所需要的数据, 经过不同的函数来实现编码, 译码以及打印二进制编码、 哈夫曼树, 把不同的数据存入不同的txt文件中, 经过主函数调用来实现功能检测。3. 输入的形式和输入值的范围 手动或者从文本中读入数据的形式初始化哈夫曼树, 从键盘中或者文件中读入数据, 以字母A-Z代表结点, 以自然数代表权值, 字符串提示使用者所要执行的操作。4.输出的形式在显示器界面上或者以文本的形式来实现程序调试的输出。5.程序所能达到的功能( 1) I:初始化( Initialization) 。从终端读入字符集大小n, 以及n个字符和n个权值, 建立哈夫曼树, 并将它存于文件
4、hfmTree中。( 2) E:编码( Encoding) 。利用已建好的哈夫曼树( 如不在内存, 则从文件hfmTree中读入) , 对文件ToBeTran中的正文进行编码, 然后将结果存入文件CodeFile中。( 3) D:译码( Decoding) 。利用已建好的哈夫曼树将文件CodeFile中的代码进行译码, 结果存入文件TextFile中。( 4) P:打印代码文件( Print) 。将文件CodeFile以紧凑格式显示在终端上, 每行50个代码。同时将此字符形式的编码文件写入文件CodePrin中。测试数据: (1) 利用下面这道题中的数据调试程序。某系统在通信联络中只可能出现八
5、种字符, 其概率分别为0.25, 0.29, 0.07, 0.08, 0.14, 0.23, 0.03, 0.11, 试设计哈夫曼编码。( 2) 用下表给出的字符集和频度的实际统计数据建立哈夫曼树, 并实现以下报文的编码和译码: ”THIS PROGRAM IS MY FAVORITE”。字符 空格 A B C D E F G H I J K L M频度 64 13 22 32 103 21 15 47 57 1 5 32 20字符 N O P Q R S T U V W X Y Z 频度 57 63 15 1 48 51 80 23 8 18 1 16 1 实现提示: ( 1) 编码结果以文
6、本方式存储在文件CodeFile中。( 2) 用户界面能够设计为”菜单”方式: 显示上述功能符号, 再加上”Q”, 表示退出运行Quit。请用户键入一个选择功能符。此功能执行完毕后再显示此菜单, 直至某次用户选择了”Q”为止。( 3) 在程序的一次执行过程中, 第一次执行I, D或E命令之后, 哈夫曼树已经在内存了, 不必再读入。每次执行中不一定执行I命令, 因为文件hfmTree可能早已建好。二、 概要设计I.初始化E.编码D.译码P.打印编码代码Q.退出请重新输入选项判断选项是否正确选择菜单项主菜单开始1. 主程序的流程图: 是否图一: 主程序流程图2程序中数据类型的定义: 用到三组结构体
7、, 分别是哈夫曼树的动态数组存储结构*HuffmanTree, 哈夫曼编码表的存储结构HuffmanCode, 字符结点的动态数组存储结构wElem以及哈夫曼树类定义classHuffman。3各程序模块之间的层次(调用)关系: 主函数main( ) 调用初始化, 编码, 译码, 打印二进制编码, 打印哈夫曼树这五个子函数; 进入初始化功能后调用手动输入, 文本读入, 默认文本这三个函数; 进入编码功能后调用手动编码, 文本读入编码这两个函数; 进入译码功能后调用手动译码, 文本读入译码这两个函数(如图2所示)。手动输入图二:各程序模块之间的层次( 调用) 关系默认文本主函数初始化编码译码打印
8、编码代码退出从文件读入从文件读入三、 详细设计1 哈夫曼树存储及类的定义: #include #include #include #include #include using namespace std;#define MAXN 60#define INF 9999int date40=INF,64,13,22,32,103,21,15,47,57,1,5,32, 20,57,63,15,1,48,51,80,23,8,18,1,6,1,INF,INF,INF,INF,INF,INF,INF,186;/字符c的频率存放在date65-c+i中int n=27;typedef struct n
9、ode int fa,lchild,rchild,w; /父亲, 左孩子, 右孩子, 权值; hfmTree;char info30;typedef struct char code50; int start;Hfmcode;Hfmcode hfmcodeMAXN; /哈夫曼编码hfmTree hfmtreeMAXN; /哈夫曼树void inithead(int n,char d) ; /初始化表void initialization(int n,char d); /建树void encoding(int n) ; /编码void decoding(); /译码void print() /打
10、印编码代码2.哈夫曼树的基本操作:void inithead(int n,char d) /初始化表void initialization(int n,char d) /建树void encoding(int n) /编码void decoding(); /译码void print() /打印编码代码void face() /输出菜单界面3.主函数int main()char c;face();int fi,fe,fd;fi=fe=fd=0;printf(数据从”sourceChar.txt”文件中输入!n); while(1)printf(-);cinc;if(c=a&c=z)c-=32;i
11、f(c=Q)break;switch(c)case I:fi=1;init();printf(初始化完毕! n);break;case E: if(fi=0)printf(请先初始化操作! n);break;fe=1;encoding(n);printf(将”ToBeTran.txt”中的正文); printf(编码完成! 结果已存在文件”CodeFile.txt”中n);break;case D: if(fi=0)printf(请先初始化操作! n);break;if(fe=0)printf(请先进行编码操作! n);break;fd=1;printf(译码成功,译码结果为: n); dec
12、oding();break;case P:if(fi=0)printf(请先初始化操作! n);break;if(fe=0)printf(请先进行编码操作! n);break;print();printf(编码结果已保存在文件”CodePrin.txt”中n);break;default:printf(输入有误, 请重新输入n); return 0;四、 调试分析和测试结果.测试数据及其输出结果: (1) 进入主菜单界面: 用户能够选择所要执行的操作, 比如: 初始化, 编码, 译码, 打印二进制编码代码。在执行编码、 译码操作前, 请先初始化默认的哈夫曼树(如图3所示)。图3: 主菜单界面当
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 哈夫曼树 应用 数据结构 课程设计 样本
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【精***】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【精***】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。