(论文)《数据结构》课程设计报告书最新优秀毕业论文资料搜集呕血奉献_第1页
(论文)《数据结构》课程设计报告书最新优秀毕业论文资料搜集呕血奉献_第2页
(论文)《数据结构》课程设计报告书最新优秀毕业论文资料搜集呕血奉献_第3页
(论文)《数据结构》课程设计报告书最新优秀毕业论文资料搜集呕血奉献_第4页
(论文)《数据结构》课程设计报告书最新优秀毕业论文资料搜集呕血奉献_第5页
已阅读5页,还剩37页未读 继续免费阅读

下载本文档

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

文档简介

北华航天工业学院课程报告数据结构课程设计报告报告(论文)题目: 1.迷宫问题 2.哈夫曼编码 作者所在系部: 计算机科学与工程系 作者所在专业: 网络工程 作者所在班级: B08522 作 者 姓 名 : 马洪彪 作 者 学 号 : 20084052227 指导教师姓名: 贾振华 完 成 时 间 : 2009年12月31日 北华航天工业学院教务处制课程设计任务书课题名称数据结构课程设计完成时间2009.12.31指导教师职称副教授学生姓名班级总体设计要求总体设计要求: 课程设计内容共给定5个题目,从中任选3个题目。每个题目都按课程设计详细要求,在规定的两周时间内完成。题目:1、链表的维护与文件形式的保存 2、迷宫问题3、哈夫曼编码/译码实现4、交通咨询系统设计5、排序算法的比较工作内容及时间进度安排第一周、周:设计动员,分组,布置课程设计任务。第一周、周2:查阅资料,制定方案,进行程序总体设计。第一周、周3第二周2:详细设计, 系统调试。第二周、周3:整理,撰写设计报告。第二周、周4-周5:验收,提交设计报告,评定成绩。毕业设计成果1、课程设计报告书一份2、源程序清单一份3、成果使用说明书一份摘 要本次课设目的在于检验学生在数据结构课程一学期中的学习成果,从而加深学生对所学知识的进一步理解与巩固。本次课程设计过程中我主要根据课本中的实现思想及算法编写程序,体现以课本知识的应用为主,在学习了线性表、栈、队列、二叉树、树和图等结构的基础上,以能够更加熟练的应用所学知识,并能结合一些著名算法来实现对一些实际问题的应用,例如,哈夫曼树等,从而更为深刻理解数据结构的内涵,熟悉它们各自的应用场合及方法。有些在平时课程中并没有掌握的内容在这次课程设计中都是先通过看课本学懂了,然后再在课程设计中加深印象,实现算法的应用和扩展。这次课程设计的设计内容主要是通过实际的例子和程序来实现课本中所学习的算法的应用。我主要做了迷宫问题、哈夫曼编码/译码实现两个题目。本文利用C+语言编写程序,分别实现了对自定义的迷宫有无路径的判定和发送端对待传送数据的编码和接收端对传送来的数据的译码。其中,迷宫问题以栈的应用为基础,随机生成迷宫,然后寻找所以路径并输出,对没有路径的迷宫,继续随机生成,直到生成存在路径的迷宫。哈夫曼编译系统分为五个功能模块:原始数据载入,打印编码规则、编码、译码。以二叉树的应用为基础,包括统计信息,并通过构建哈夫曼树、对信息进行哈夫曼编码,将编码信息等存入文档。两个系统均已经过全面的测试,能够很好的运行,达到了预期的效果。关键词:数据结构 栈和队列 二叉树 哈夫曼编码 迷宫 目 录数据结构课程设计报告书3第1章 绪论31.1 课程设计选题的目的31.2 课程设计选题的背景和意义31.2.1课程设计选题的背景31.2.2课程设计选题的意义31.3 课题研究的主要内容3第2章 需求分析32.1 输入/输出形式和输出值的范围32.2 程序功能32.3 测试数据32.3.1正确的输入及输出结果32.3.2 错误的输入及输出结果3第3章 概要设计33.1 设计思想33.2 函数间的关系3第4章 详细设计34.1 迷宫的主要结构34.2 哈夫曼的主要结构3第5章 调试分析35.1 问题描述35.2解决方案35.3 对设计实现的回顾讨论和分析35.4 对算法的分析和改进设想35.5 经验和体会3第6章 测试并列出测试结果36.1 迷宫问题测试结果36.2 哈夫曼系统测试结果3第7章 总 结37.1 设计体会37.1.1 系统的优点37.1.2 本系统的不足37.1.3 可改进的地方37.2 结束语3致 谢3参考文献3附 录3数据结构课程设计报告书第1章 绪论随着信息产业的飞速发展,信息化管理及查询已经引入并应用到各行业管理领域,各种形式的百货商场、大型仓储超市、便利店、连锁超市和专卖店等形式的零售业鳞次栉比,不断改变、影响着人们的价值观念和生活方式。因此,要提升企业竞争力,就要大力推进企业信息化建设,利用先进的办公自动化系统来实现企业内部信息管理、共享及交流,才能使企业在竞争激烈的21世纪取得先机。1.1 课程设计选题的目的为大家解决一些生活中实际的问题,在这个过程中,编程人员自身的能力也在不断地提高。此次程序设计综合运用所学知识解决实际问题,将课堂的书本知识有效的在程序中体现出来,让学生更理解了C+功能之强大,进一步让学生对面向对象的方法以及C+的编程思想有了较好了解和认识。此外,此次设计培养独立开发、设计、调试、运行程序的能力,激发了学生较强的自学兴趣,锻炼学生之间以及学生与老师的交通能力,培养学生合作精神,让学生更好的认识到合作的重要性,使学生在今后的学习中加强对合作精神的培养。1.2 课程设计选题的背景和意义1.2.1课程设计选题的背景(1)迷宫问题迷宫相信大家都玩过,但是有的迷宫在开始构造时的错误就没有出路,而让游戏者花费很多时间去寻找出路,所以需要一个程序来判断此迷宫是否有出路,避免了浪费时间。(2)哈夫曼系统的设计在这信息量发达的时代,随着社会的进步,信息不断地增多和更新,为了使信息更加快速、准确有的传递。需要一个程序来完成。 1.2.2课程设计选题的意义一般来说,课程设计要比教学实验复杂一些,涉及的深度深,而且更加实用些。其目的是通过课程设计的综合训练,培养学生分析解决实际问题和编程等动手能力,最终目标是想通过这种形式,帮助同学系统掌握C+这门课程的主要内容,使老师更好的完成教学任务。结合实际应用的要求,使课程设计既覆盖教学所要求的知识点,又接近工程的实际需要,训练自己实际分析问题和解决问题以及编程的能力。通过详细的实例分析,循环渐进的描述,启发学生顺利的完成设计。课程设计将设计要求、需求分析、算法设计、编程和实例测试运行分开,为学生创造分析问题、独立思考的条件。只要学生在吃透要求和算法的前提下,完全可以不按书中提示的参考程序,自己设计出更具有特色的程序。1.3 课题研究的主要内容(1)迷宫问题可由操作者自己输入迷宫的大小,然后随机生成迷宫,。系统会对输入的数据进行判断其合法性,如不正确,系统会有提示语句,让操作者重新输入。通过计算最后输出所有迷宫的路径。(2)哈夫曼编码要求完成发送端对待传送数据的编码和接收端对传送来的数据的译码。要实现五个功能:接受原始数据、编码、译码、打印编码规则、将编码、译码存档。通过系统的提示要建立哈夫曼树并对载入的原文件进行编码,并保存到locking.txt文件中,同时输出到屏幕。最后将建立的哈夫曼树用某种树的储存方式储存后输出。第2章 需求分析随着经济全球化的推进以及企业激烈的竞争,改善企业内部及整个供应链各环节的管理、调度及资源配置,迅速适应客户的新需求和市场新机遇,是企业赢得竞争胜利的决定性因素。2.1 输入/输出形式和输出值的范围(1)迷宫定义外围为1,作为墙壁,内部用0、1输入,0表示有可走,1表示不可走。入口默认为左上角,出口默认为右下角。(2)哈夫曼编码,输入信息以加载存档的reading.txt文件为方式,加载不成功,提示出错信息,加载成功后,系统对其编码,并按照选择对各种相关信息存档。2.2 程序功能(1)迷宫问题在迷宫问题中,可由操作者自己输入迷宫的大小,系统会对输入的数据进行判断其合法性,如不正确,系统会有提示语句,让操作者重新输入。最后输出一条迷宫的出路。(2)哈夫曼编码问题可以读入操作者存在指定文件里的信息,并对其进行哈夫曼编码以及将编码信息存档。2.3 测试数据2.3.1正确的输入及输出结果(1)迷宫问题:在生成迷宫后,将迷宫路径输出,如图2-1所示:图2-1 迷宫的正确输入、输出结果截图(2)哈夫曼编码问题:在读入文件信息后,对文件进行编码,并显示编码规则等信息,如图2-2所示:图2-2 哈夫曼编码的正确输入、输出结果截图2.3.2 错误的输入及输出结果(1)迷宫问题:在输出迷宫的可行路径前,需要先生成迷宫。因此,在未生成迷宫时输入“输出可行路径”的命令时,将提示出错信息,如图2-3所示:图2-3 测迷宫的错误输入、输出结果截图(2)哈夫曼编码问题:在进行编码、译码及存储编码规则和编码、译码后的信息前,需要先读取文件信息,因此,在未读取文件信息时,输入“显示编码规则”等命令时,会提示出错:如图2-4所示:图2-4哈夫曼的错误输入、输出结果截图第3章 概要设计3.1 设计思想 (2)哈夫曼树用邻接矩阵作为存储结构,借助静态链表来实现遍历。3.2 函数间的关系(2)哈夫曼系统,函数间的关系如图3-2所示: 图3-2 哈夫曼编码问题中函数间的关系第4章 详细设计4.1 迷宫的主要结构4.2 哈夫曼的主要结构(1)结构定义:#define MAXVALUE 1000/定义最大权值#define MAXBIT 100/定义哈夫曼树中叶子结点个数typedef struct char data;/字符值int num;/某个值的字符出现的次数TotalNode;/统计结点,包括字符种类和出现次数typedef struct TotalNode tot300;/统计结点数组int num;/统计数组中含有的字符个数Total; /统计结构体,包括统计数组和字符种类数typedef struct char mes300;/字符数组int num;/总字符数Message;/信息结构体,包括字符数组和总字符数typedef structint locked500;/密码数组int num;/密码总数Locking;/哈夫曼编码后的密文信息typedef struct char data;/字符int weight;/权值int parent;/双亲结点在数组HuffNode中的序号int lchild;/左孩子结点在数组HuffNode中的序号int rchild;/右孩子结点在数组HuffNode中的序号HNodetype;/哈夫曼树结点类型,包括左右孩子,权值和信息typedef struct int bitMAXBIT;int start;HCodetype;/哈夫曼编码结构体,包括编码数组和起始位(2)主要函数声明及功能描述如下:void reading_file(Message *message);从文件中读取信息void writing_file(Message *message);将信息写进文件void total_message(Message *message,Total *total);统计信息中各字符的出现次数void HaffmanTree(Total *total,HNodetype HuffNode);构建哈夫曼树void HaffmanCode(HNodetype HuffNode,HCodetype HuffCode,Total *total);建立哈夫曼编码void writing_HCode(HNodetype HuffNode,HCodetype HuffCode,Total *total);将编码规则写进文件void lock(Message *message,HNodetype HuffNode,HCodetype HuffCode,Total *total,Locking *locking);给文件信息加密编码void writing_lock(Locking *locking);将已编码信息写进文件void writing_translate(Locking *locking,HCodetype HuffCode,HNodetype HuffNode,Total *total);将已编码信息翻译过来并写进文件第5章 调试分析5.1 问题描述(1)用什么样的储存方式。(2)考虑栈和队列对迷宫探究的不同。5.2解决方案(1)采用静态链表储存。(2)栈是先进后出,队列是先进先出。5.3 对设计实现的回顾讨论和分析程序使用了文件来编码和译码,创建哈夫曼树并用层次遍历输出,把编码后的信息存入文件并译码,再输出并保存。系统二是对迷宫问题探究的系统,其核心思想用栈是实现对迷宫通路的求解。该过程中应用了栈的先进后出的特点去探究路径,保存后输出。建立了数组实现迷宫的虚拟化,用move数组来指示求路径时的方向。 5.4 对算法的分析和改进设想(1)功能不是很强大,对错误字符编码但不输出,要能输入入口坐标。(2)栈和队列是受限制的线性表,是软件中常用的两种数据结构,可以很方便的对它们进行操作。还可改进成更为简洁、灵活的程序。5.5 经验和体会(1)编程时要认真,出现错误要及时找出并改正,遇到问题要去查相关的资料。反复的调试程序,把各个注意的问题要想到;同时要形成自己的调试程序的风格,从每个细节出发,不放过每个知识点。另外,要注意符号的使用。(2)通过此次课设我学到了好多东西,以前会的知识更加熟悉了,而且有了更深的认识;不太清楚的知识点也有了新的理解。第6章 测试并列出测试结果6.2 哈夫曼系统测试结果选择“从文件读取信息”,程序将从文件读取信息,如果读取失败(不存在该信息文件),则结束,如果读取成功,则输出读取成功的提示信息,如图6-3及图6-4所示:图6-3 从文件读取信息截图图6-4 存放原信息的文档reading.txt截图选择“显示编码规则”,则将信息编码并输出编码规则,如图6-5所示:图6-5 显示编码规则截图选择“将原文件信息写进文件”,则将读入内存中的文件信息存储到文档writing.txt中,如图6-6及图6-7所示:图6-6 将原文件信息写入文件截图图6-7 存放原信息的文档writing.txt截图在读入信息的前提下,选择“将编码规则写进文件”,则对信息编码并将编码规则写入文档HCode.txt中,如图6-8及图6-9所示:图6-8 将编码规则写入文件截图图6-9 存放编码规则的文档HCode.txt截图选择“将编码后的信息写进文件”,则对信息编码并将编码后的信息写入文档locking.txt中,如图6-10及图6-11所示:图6-10 将编码后的信息写入文件截图图6-11 存放编码后的信息的文档locking.txt截图选择“将译码后的信息写进文件”,则对编码信息译码并将译码后的信息写入文档translate.txt中,如图6-12及图6-13所示:图6-12 将译码后的信息写入文件截图图6-13 存放译码信息的文档translate.txt截图第7章 总 结7.1 设计体会7.1.1 系统的优点(1)特色:有完整的界面管理,清楚的信息提示,方便的执行过程,严谨的结构控制。7.1.2 本系统的不足(1)操作选择中,对字符和整型间的输入无法判断,只能终止程序。迷宫问题中,出入口为默认,迷宫地图为随机生成,用户无法自定义。哈弗曼问题中,只能对存入文档的信息进行编码、译码,且文件名及位置已指定,用户无法进行直接输入。(2)函数间的兼容性弱,结构不明了,不便于改变参数和数据。(3)程序代码不够简练,并且可读性也不是很好。7.1.3 可改进的地方(1)各个菜单界面可以设计的更为美观,更简洁易懂。(2)可以从各个方面考虑设置容错机制使程序更健壮。7.2 结束语通过将近两周的课设练习,认识到知识的迁移运用,理论应用实际和相互间的密切联系,感受到理论知识的重要,在今后的学习中一定会更加努力,认真。体会到自己知识有所缺乏,和个人能力的有限,只有通过同学、老师间的密切配合才能完成一项不错的工作。从中也体会到了学习中的乐趣,可以自由的创作自己喜欢的东西并自己调试。致 谢在课程设计过程中遇到了很多问题,不过在老师和和同学们的帮助下大部分都得以解决,首先要对他们表示感谢。同时,我们也要感谢学校为我们提供了大量的图书,通过看书我们也学到了很多课堂上学不到的东西。通过此次课程设计我最大的收获是学会了自主学习,也增加了与老师和同学们的交往、增进了相互之间的感情。参考文献1严蔚敏,吴伟民数据结构:C语言版北京:清华大学出版社,19972刘国钧、郑如斯中国书的故事北京:中国青年出版社,19793 周霭如、林伟健C+程序设计基础北京:电子工业出版社4 耿国华数据结构北京:高等教育出版社,20055 姚伯元课程设计(论文)规范化管理与培养学生综合素质中国高等教育网教学研究,2005附 录附录1:迷宫问题源代码:(1) 头文件head.h#define MAXSIZE 100typedef struct int x,y,d;Datatype;/栈中元素类型定义typedef struct Datatype dataMAXSIZE*MAXSIZE;int top;Seqstack; /栈定义typedef struct int x;int y;zuobiao;/元素坐标定义Seqstack *s1,*s2;/定义两个栈方便按顺序输出栈中元素Datatype item;/定义临时坐标int number;/定义可行路径条数int mazeMAXSIZEMAXSIZE;/定义迷宫数组Seqstack *Init_Seqstack();/栈初始化void Push_Seqstack(Seqstack *s,Datatype item);/入栈void Pop_Seqstack(Seqstack *s,Datatype *item);/出栈void Init_Move(zuobiao move4);/MOVE方向数组初始化void Init_Maze(int m,int n);/产生随机迷宫void output(int m,int n);/显示迷宫void Maze(zuobiao move4,int m,int n,int mark);/搜索迷宫路径void result(Seqstack *s);/输出迷宫路径(2) 源文件source.cpp#includehead.h#include#include#includeusing namespace std;int main()int m,n,mm,nn,mark=0;zuobiao move4;/定义方向数组,包含上、下、左、右四个方向Init_Move(move);/MOVE方向数组初始化 s1=Init_Seqstack();/栈1初始化s2=Init_Seqstack();/栈2初始化while(1)int choice;cout*endl;cout* 1:产生随机迷宫 2:输出可行的所有路径 3退出 * endl;cout*endl;coutchoice;switch(choice)case 1:number=0;/可行路径条数初始化coutmmnn;/输入迷宫行列数if(mm25|n25)cout迷宫地图太大,无法生成endl;else if(mm1|nn1)cout参数错误,无法生成迷宫endl;elsem=mm+2;n=nn+2;mark=-1;/mark初始化while(number=0)/直到找到所有迷宫的可行路径为止Init_Maze(m,n);/产生随机迷宫 Maze(move,m,n,mark);/搜索迷宫可行路径cout产生随机迷宫成功:endl;output(m,n);/显示迷宫coutendl;break;case 2:number=0;/可行路径条数初始化if(mark=0)cout未产生随机迷宫,请先生成随机迷宫endl;elsemark=1;/mark赋值为1表示再次搜索路径时输出路径Maze(move,m,n,mark);/搜索路径并输出可行路径cout迷宫共有number条可行路径endl;coutendl;break;case 3:exit(1);default:cout输入错误,请重新输入top=-1;return s;/栈初始化void Push_Seqstack(Seqstack *s,Datatype item)s-top+;s-datas-top.x=item.x;s-datas-top.y=item.y;s-datas-top.d=item.d;/入栈void Pop_Seqstack(Seqstack *s,Datatype *item)(*item).x=s-datas-top.x;(*item).y=s-datas-top.y;(*item).d=s-datas-top.d;s-top-;/出栈void Init_Move(zuobiao move4)move0.x=0;move0.y=1;/向右move1.x=1;move1.y=0;/向下move2.x=0;move2.y=-1;/向左move3.x=-1;move3.y=0;/向上/MOVE方向数组初始化void Init_Maze(int m,int n)int i,j;srand(unsigned)time(NULL); for(i=0;im;i+)/对迷宫数组遍历for(j=0;jtop!=-1)/栈空则搜索完毕,否则继续搜索Pop_Seqstack(s1,&item);if(item.d!=-1)mazeitem.x+moveitem.d.xitem.y+moveitem.d.y=0;x=item.x;y=item.y;d=item.d+1;while(ddatas1-top.x; y=s1-datas1-top.y;elsed=0;/方向初始化elsed+;/从下一个方向开始/搜索迷宫路径void result(Seqstack *s1)cout第 number 条可行路径:top!=-1)/将栈1中路径倒入栈2Pop_Seqstack(s1,&item);/出栈1Push_Seqstack(s2,item);/入栈2while(s2-top!=-1)/将栈2中路径倒入栈1,同时输出路径顺序Pop_Seqstack(s2,&item);/出栈2 cout( item.x,item.y );if(item.d=0)cout;if(item.d=1)cout;if(item.d=2)cout;if(item.d=3)cout;Push_Seqstack(s1,item);/入栈1coutendl;/输出迷宫路径void output(int m,int n)int i,j;for(i=0;im;i+) for(j=0;jn;j+)if(mazeij=-1)mazeij=0;/恢复迷宫coutmazeij ;/显示迷宫coutendl;/显示迷宫附录2:哈夫曼编码问题源代码:(1) 头文件head.h#define MAXVALUE 1000/定义最大权值#define MAXBIT 100/定义哈夫曼树中叶子结点个数typedef struct char data;/字符值int num;/某个值的字符出现的次数TotalNode;/统计结点,包括字符种类和出现次数typedef struct TotalNode tot300;/统计结点数组int num;/统计数组中含有的字符个数Total; /统计结构体,包括统计数组和字符种类数typedef struct char mes300;/字符数组int num;/总字符数Message;/信息结构体,包括字符数组和总字符数typedef structint locked500;/密码数组int num;/密码总数Locking;/哈夫曼编码后的密文信息typedef struct char data;/字符int weight;/权值int parent;/双亲结点在数组HuffNode中的序号int lchild;/左孩子结点在数组HuffNode中的序号int rchild;/右孩子结点在数组HuffNode中的序号HNodetype;/哈夫曼树结点类型,包括左右孩子,权值和信息typedef struct int bitMAXBIT;int start;HCodetype;/哈夫曼编码结构体,包括编码数组和起始位void reading_file(Message *message);/从文件中读取信息void writing_file(Message *message);/将信息写进文件void total_message(Message *message,Total *total);/统计信息中各字符的次数void HaffmanTree(Total *total,HNodetype HuffNode);/构建哈夫曼树void HaffmanCode(HNodetype HuffNode,HCodetype HuffCode,Total *total);/建立哈夫曼编码void writing_HCode(HNodetype HuffNode,HCodetype HuffCode,Total *total);/将编码规则写进文件void lock(Message *message,HNodetype HuffNode,HCodetype HuffCode,Total *total,Locking *locking);/给文件信息加密编码void writing_lock(Locking *locking);/将已编码信息写进文件void writing_translate(Locking *locking,HCodetype HuffCode,HNodetype HuffNode,Total *total);/将已编码信息翻译过来并写进文件(2) 源文件source.cpp#includehead.h#include#includeusing namespace std;int main()int i,j,choice,mark=0;/mark标记文件信息是否读入到内存中HNodetype HuffNode500;/保存哈夫曼树中各结点信息HCodetype HuffCode300;Locking *locking; Total *total;Message *message;locking=new Locking;locking-num=0;total=new Total;total-num=0;message=new Message;message-num=0;/初始化变量while(1)cout*;cout*1:从文件读取信息 2:显示编码规则 3:将原文件信息写进文件*;cout*4:将编码规则写进文件 5:将编码后的信息写进文件 6:将译码后的信息写进文件 7:退出*;cout*endl;coutchoice;switch(choice)case 1:reading_file(message);/从文件中读取信息mark=1;break;case 2:/显示编码规则 if(mark=0)cout请先从文件中读取信息!endl;elsetotal_message(message,total);/统计信息中各字符的出现次数 HaffmanTree(total,HuffNode);/构建哈夫曼树 HaffmanCode(HuffNode,HuffCode,total);/建立哈夫曼编码for(i=0;inum;i+)/显示编码规则 couttoti.data ;for(j=HuffCodei.start+1;jnum;j+)coutHuffCodei.bitj; coutendl; break; case 3:/将原文件信息写进文件if(mark=0)cout请先从文件中读取信息!endl;elsewriting_file(message);/将信息写进文件break;case 4:/将编码规则写进文件if(mark=0)cout请先从文件中读取信息!endl;elsetotal_message(message,total);/统计信息中各字符的出现次数 HaffmanTree(total,HuffNode);/构建哈夫曼树 HaffmanCode(HuffNode,HuffCode,total);/建立哈夫曼编码 writing_HCode(HuffNode,HuffCode,total);/将编码规则写进文件break;case 5:/将编码后的信息写进文件if(mark=0)cout请先从文件中读取信息!endl;elsetotal_message(message,total);/统计信息中各字符的出现次数 HaffmanTree(total,HuffNode);/构建哈夫曼树 HaffmanCode(HuffNode,HuffCode,total);/建立哈夫曼编码 lock(message,HuffNode,HuffCode,total,locking);/给文件信息加密编码 writing_lock(locking);/将已编码信息写进文件break;case 6:/将译码后的信息写进文件if(mark=0)cout请先从文件中读取信息!endl;elsetotal_message(message,total);/统计信息中各字符的出现次数 HaffmanTree(total,HuffNode);/构建哈夫曼树 HaffmanCode(HuffNode,HuffCode,total);/建立哈夫曼编码writing_translate(locking,HuffCode,HuffNode,total);/将已编码信息翻译过来并写进文件break;case 7:exit(1);default:cout输入错误,请重新选择endl;for(i=0;inum;i+)if(locking-lockedi=-1)cout ;elsecoutlockedi; coutendl;for(i=0;inum;i+)couttoti.data toti.numendl; for(i=0;inum)-1;i+)coutHuffNodei.parent ;coutendl;return 0;void reading_file(Message *message) /*打开reading文件,失败则结束。不断读取字符并保存进message数组中,直到遇到#结束,记录字符总数*/int i=0;char ch;ifstream infile(c:reading.txt,ios:in|ios:out);if(!infile)/打开失败则结束cout打开c:reading.txt文件失败endl;exit(1);elsecout读取文件成功mesi=ch; i+;message-num=i;/记录总字符数infile.close();/关闭文件/从文件中读取信息void writing_file(Message *message)/将信息写进文件 /*打开writing文件,失败则结束。将信息写进文件*/int i;ofstream outfile(c:writing.txt,ios:in|ios:out);/打开文件if(!outfile)/打开失败则结束cout打开c:writing.txt文件失败endl;exit(1);for(i=0;inum;i+)/写文件outfile.put(message-mesi); cout信息写进文件成功endl;outfile.close();/关闭文件/将原信息写入文件void total_message(Message *message,Total *total)/*将message中的字符种类及出现次数统计保存到total数组中,重复字符用mark标记,否则新建字符种类。记录下字符种类的个数*/int i,j,mark;for(i=0;inum;i+)/遍历message中的所有字符信息if(message-m

温馨提示

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

评论

0/150

提交评论