logo资料库

数据结构哈夫曼树课程设计.doc

第1页 / 共22页
第2页 / 共22页
第3页 / 共22页
第4页 / 共22页
第5页 / 共22页
第6页 / 共22页
第7页 / 共22页
第8页 / 共22页
资料共22页,剩余部分请下载后查看
1.系统概述
2.系统分析
(1)功能函数模块划分
(2)流程图
3.系统详细设计
(1)菜单部分
(2)统计字符
(3)创建哈夫曼树以及哈夫曼编码
(4)文档的哈夫曼编码
4.运行结果展示
(1)统计字符出现的个数
(2)哈夫曼编码
(3)文档的编码加密
5.总结心得
附件(完整代码)
课 程 设 计 说 明 书 哈夫曼编码 题目: 姓名: 学号: 班级: 电 信 学 院 软 件 工 程 系 2017 年 07 月 07 日
课程设计任务书 数据结构(C++) 哈夫曼编码系统 学号 班级 【1】运用哈夫曼树的基础知识,统计一篇英语文章中的字符种类和数量。 【2】完成哈夫曼树的创建,编码等操作。 【3】运用链式存储结构,用来从文件中读取数据,构造哈夫曼编码。 【4】对文件的操作,打开及读写。 1 代码书写规范。 2 关键函数要有流程图。 3 要有测试用例和相应运行结果(截图)。 4 报告内容要清晰明了,并遵守格式规范。 5 总结完成设计过程中的得失。 课程 名称 题目 姓名 设 计 任 务 设 计 要 求 指导教师 签字
课程设计评分表 课程设计题目:哈夫曼编码系统 姓名 学院 评价指标 学号 专业 指标内涵 分值 评分 选题难度 选题难度分为两个等级,A 类选题为一级,B 类选 题为二级 工 作 量 工作量饱满,工作认真、严谨,遵守纪律,与同学 团结协作、协调能力强,能按时完成设计任务。 综合运用 识 知 综合运用知识能力强,能较系统地运用有关理论与 知识解决实际问题。能够独立查阅文献资料,从事 调查研究;具有收集、整理、加工各种信息及获取 新知识的能力。 30 设计水平与 实际能力 能独立开展设计工作,能熟练掌握和运用所学基本 理论、基本知识和基本技能分析解决相关理论和实 际问题,设计方案合理可行,界面友好,符合课题 要求,实现相应功能;可以加以其他功能或修饰, 使程序更加完善、合理;操作方便易行。 写作水平 语言表达清晰,报告内容详实,能对本人所做工作 进行详细论述。 30 文档质量 能够按照给定格式排版,页面美观。 思路清晰,语言流畅,回答问题准确。(无此环节则删除此行) 30 按时出勤,不迟到早退,以每次点名为准 10 选 题 与 设 计 完 成 情 况 说 明 书 撰 写 答 辩 考 勤 成 绩 评阅时间: 2017 年 07 月 日
目录 1.系统概述........................................................................................... 5 2.系统分析........................................................................................... 5 (1)功能函数模块划分................................................................5 (2)流程图....................................................................................5 3.系统详细设计................................................................................... 6 (1)菜单部分................................................................................6 (2)统计字符................................................................................7 (3)创建哈夫曼树以及哈夫曼编码........................................... 8 (4)文档的哈夫曼编码............................................................. 10 4.运行结果展示..................................................................................11 (1)统计字符出现的个数......................................................... 12 (2)哈夫曼编码..........................................................................12 (3)文档的编码加密..................................................................13 5.总结心得......................................................................................... 13 附件(完整代码)............................................................................. 14
1.系统概述 随着信息时代的到来,信息越来越多,如何压缩信息已经是重要课题。特别是多媒体 技术的发展,使得信息量大的问题凸显。哈夫曼编码是广泛用于数据文件压缩的十分有效的 方法。本系统的前端开发工具是 Visual studio 2013,主要是对文本的处理,打开一篇英文 文章,统计该文章中每个字符出现的次数,然后以它们作为权值,设计一个哈夫曼编码。本 程序经过测试后功能均能实现。 2.系统分析 (1)功能函数模块划分 HuffmanClass(); //Setvalue 设置初值 void CreateHT(); //构造哈夫曼树 void CreateHCode(); //根据哈夫曼树求哈夫曼编码 void DispHCode(); //输出哈夫曼编码 void Revertext(); //将文本转化成二进制代码存入另一个文件中 (2)流程图 break
3.系统详细设计 (1)菜单部分 本模块主要涉及 while 和 switch 语句,在程序运行时候非常简洁,易于操作,具有较强 的可视性及便捷性。 while (i != 0) { cout << "******************(*^__^*) 哈夫曼编码系统欢迎您 (*^__^*)******************" << endl; " << endl; " << endl; " << endl; " << endl; cout << " cout << " cout << " cout << " switch (i) { case 1: 1.统计文件中各个字符出现的个数; 2.对文件进行处理得到哈夫曼树编码; 3.对文件进行编码加密; 0.退出 List.creatlist(); List.disp(); List.total(); break; case 2: L.CreateHT(); L.CreateHCode(); L.DispHCode(); break; case 3: L.CreateHT(); L.CreateHCode(); L.Revertext(); break; case 0: /* exit(0);*/ case 0: cout << "欢迎下次使用译码器(哈夫曼)" << endl; break; } cout << "请输入您要进行的操作:"; cin >> i; system("cls");
} } (2)统计字符 下面函数主要涉及单链表的链式存储结构,利用数组对已经建立好的文本统计字符出现 的次数。 void total() { linklist *s; int j = 0; int count[127] = { 0 }; s = head->next; int num; while (s) { num = s->data; if (num != 32) { count[num - 0]++; } s = s->next; } cout << "统计" << endl; cout << "|---------------------------------------------|" << endl; cout << "| 字母 |" << endl; for (int i = 0; i < 127; i++) { 频度 | if (count[i]) { aa[j].data = i; aa[j].weight = count[i]; j++; cout << "| " << char(i) << " << setw(6) << count[i] << " |" << endl; } | " } Count = j; cout << "|---------------------------------------------|" << endl; cout << "出现的字母种类为:" << Count << "个" << endl; cout << endl; }
(3)创建哈夫曼树以及哈夫曼编码 void HuffmanClass::CreateHT() { int i, k, lnode, rnode; double min1, min2; for (i = 0; i < (2 * no - 1); i++) { } ht[i].parent = -1; ht[i].lchild = -1; ht[i].rchild = -1; for (i = no; i < (2 * no - 1); i++) { min1 = min2 = 32767.0; lnode = rnode = -1; for (k = 0; k <= (i - 1); k++) if (ht[k].parent == -1) { } if (ht[k].weight < min1) { } min2 = min1; rnode = lnode; min1 = ht[k].weight; lnode = k; else if (ht[k].weight < min2) { } min2 = ht[k].weight; rnode = k; ht[lnode].parent = i;
分享到:
收藏