哈夫曼树的应用数据结构优秀课程设计.doc
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_05.gif)
《哈夫曼树的应用数据结构优秀课程设计.doc》由会员分享,可在线阅读,更多相关《哈夫曼树的应用数据结构优秀课程设计.doc(24页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、 数据结构课程设计汇报 题 目: 哈夫曼树应用 学生姓名: 谢辉 学 号: 17010201 专业班级: 计科13102 同组姓名: 赵丽娜 指导老师: 徐晓蓉 设计时间: 下学期第18周 指导老师意见: 评定成绩: 署名: 日期:目录一、需求分析21.分析问题22.确定处理方案23.输入形式和输入值范围34.输出形式35.程序所能达成功效3二、概要设计41. 主程序步骤图:42程序中数据类型定义:43各程序模块之间层次(调用)关系:4三、具体设计51哈夫曼树存放及类定义:52.哈夫曼树基础操作:63.主函数7四、调试分析和测试结果.91.测试数据及其输出结果:92.调试过程中碰到问题及处理措
2、施:13五、总结14六、参考文件14七、致谢14八、附录14一、 需求分析1. 分析问题 利用哈夫曼编码进行通信能够大大提升信道利用率,缩短信息传输时间,降低传输成本。不过,这要求在发送端经过一个编码系统对待传数据预先编码,在接收端将传来数据进行译码(复原)。对于双工信道(即能够双向传输信息信道),每端全部需要一个完整编/译码系统。为这么信息收发站写一个哈夫曼码编/译码系统。2. 确定处理方案设计建立带权哈夫曼树,确定哈夫曼树类和组员函数,和各函数之间调用关系,采取动态数组存放结构存放所需要数据,经过不一样函数来实现编码,译码和打印二进制编码、哈夫曼树,把不一样数据存入不一样txt文件中,经过
3、主函数调用来实现功效检测。3. 输入形式和输入值范围 手动或从文本中读入数据形式初始化哈夫曼树,从键盘中或文件中读入数据,以字母A-Z代表结点,以自然数代表权值,字符串提醒使用者所要实施操作。4.输出形式在显示器界面上或以文本形式来实现程序调试输出。5.程序所能达成功效(1)I:初始化(Initialization)。从终端读入字符集大小n,和n个字符和n个权值,建立哈夫曼树,并将它存于文件hfmTree中。(2)E:编码(Encoding)。利用已建好哈夫曼树(如不在内存,则从文件hfmTree中读入),对文件ToBeTran中正文进行编码,然后将结果存入文件CodeFile中。(3)D:译
4、码(Decoding)。利用已建好哈夫曼树将文件CodeFile中代码进行译码,结果存入文件TextFile中。(4)P:打印代码文件(Print)。将文件CodeFile以紧凑格式显示在终端上,每行50个代码。同时将此字符形式编码文件写入文件CodePrin中。测试数据:(1) 利用下面这道题中数据调试程序。某系统在通信联络中只可能出现八种字符,其概率分别为0.25,0.29,0.07,0.08,0.14,0.23,0.03,0.11,试设计哈夫曼编码。(2)用下表给出字符集和频度实际统计数据建立哈夫曼树,并实现以下报文编码和译码:“THIS PROGRAM IS MY FAVORITE”。
5、字符 空格 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) 编码结果以文本方法存放在文件CodeFile中。(2) 用户界面能够设计为“菜单”方法:显示上述功效符号,再加上“Q”,表示退出运行Quit。请用户键入一个选择功效符。此功效实施完成后再显示此菜单,直至某次用户选择了“Q”为止。(3) 在程序一次实施过程中,第一次实施I,D或E命令以后,哈夫曼树已经在内存
6、了,无须再读入。每次实施中不一定实施I命令,因为文件hfmTree可能早已建好。二、概要设计I.初始化E.编码D.译码P.打印编码代码Q.退出请重新输入选项判定选项是否正确选择菜单项主菜单开始1. 主程序步骤图:是否图一:主程序步骤图2程序中数据类型定义:用到三组结构体,分别是哈夫曼树动态数组存放结构*HuffmanTree,哈夫曼编码表存放结构HuffmanCode,字符结点动态数组存放结构wElem和哈夫曼树类定义classHuffman。3各程序模块之间层次(调用)关系:主函数main()调用初始化,编码,译码,打印二进制编码,打印哈夫曼树这五个子函数;进入初始化功效后调用手动输入,文本
7、读入,默认文本这三个函数;进入编码功效后调用手动编码,文本读入编码这两个函数;进入译码功效后调用手动译码,文本读入译码这两个函数(图2所表示)。手动输入图二:各程序模块之间层次(调用)关系默认文本主函数初始化编码译码打印编码代码退出从文件读入从文件读入三、 具体设计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,6
8、3,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 node 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) ; /
9、初始化表void initialization(int n,char d); /建树void encoding(int n) ; /编码void decoding(); /译码void print() /打印编码代码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()
10、;int fi,fe,fd;fi=fe=fd=0;printf(数据从“sourceChar.txt”文件中输入!n); while(1)printf(-);cinc;if(c=a&c=z)c-=32;if(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:
11、if(fi=0)printf(请先初始化操作!n);break;if(fe=0)printf(请优异行编码操作!n);break;fd=1;printf(译码成功,译码结果为:n); decoding();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) 进入主菜
12、单界面:用户能够选择所要实施操作,比如:初始化,编码,译码,打印二进制编码代码。在实施编码、译码操作前,请先初始化默认哈夫曼树(图3所表示)。图3:主菜单界面当输入错误指令时(图4所表示):图4当未进行初始化时进行编码是输出(图5所表示):图5(2) 进入初始化界面(图6所表示):图6(3) 进入编码界面(图7所表示):图7(4) 进入译码界面(图8所表示):图8(5) 进入打印编码代码界面(图9所表示):图9(6) 退出系统(图10所表示):1.调试过程中碰到问题及处理措施:在此系统中,我负责是编码,赫夫曼树建立在译码之前,数据从文件“SourceChar.txt”中输入,对26个英文字母和
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 哈夫曼树 应用 数据结构 优秀 课程设计
![提示](https://www.taowenge.com/images/bang_tan.gif)
限制150内