收藏 分享(赏)

数据结构课程设计-哈夫曼编码译码器.doc

上传人:HR专家 文档编号:5210019 上传时间:2019-02-12 格式:DOC 页数:23 大小:421.36KB
下载 相关 举报
数据结构课程设计-哈夫曼编码译码器.doc_第1页
第1页 / 共23页
数据结构课程设计-哈夫曼编码译码器.doc_第2页
第2页 / 共23页
数据结构课程设计-哈夫曼编码译码器.doc_第3页
第3页 / 共23页
数据结构课程设计-哈夫曼编码译码器.doc_第4页
第4页 / 共23页
数据结构课程设计-哈夫曼编码译码器.doc_第5页
第5页 / 共23页
点击查看更多>>
资源描述

1、课 程 设 计课程名称_ _数据结构课程设计_ 题目名称_ 哈夫曼编码译码器_ 学生学院 专业班级 学 号 学生姓名 指导教师 2011 年 12 月 23 日1摘要:在当今信息爆炸时代,如何采用有效的数据压缩技术来节省数据文件的存储空间和计算机网络的传送时间已越来越引起人们的重视。电报通信是传递文字的二进制码形式的字符串。但在信息传递时,总希望总长度尽可能最短,即采用最短码。关键字:哈夫曼树 编码 解码 数据压缩技术2目 录摘要: 1关键字: 1第一章 需求分析 3第二章 数据结构定义及其操作实现 3第三章 程序设计及其实现 33.1 从文件读入原文 .33.2 统计原文中各字符的权值 .4

2、3.3 编码 .53.4 解码 .63.5 主函数 .7第四章 运行结果及其分析 8第五章 问题及其解决方法 10第六章 心得体会(设计总结) 10附录 源程序 111、 头文件 112、 赫夫曼编码算法 123、 主函数 18参 考 文 献 213第一章 需求分析1问题要求:打开一篇英文文章,统计出每个字符出现的次数,然后以他们为权值,对每个字符进行编码,编码完成后对其编码进行译码。2程序运行环境:windows、visual c+或 java 等3要求:a) 输入一篇英文文章,根据字符出现的次数给出哈夫曼编码方式。b) 对英文文章进行编码;c) 对编码进行译码核对正确性第二章 数据结构定义

3、及其操作实现2.1 哈弗曼树节点typedef struct unsigned int weight;unsigned int parent;unsigned int lchild;unsigned int rchild;HuffTreeNode,*HuffTree;2.2 字符-权值- 编码映射typedef structchar c;unsigned int weight;char *code;CharMapNode,*CharMap;第三章 程序设计及其实现3.1 从文件读入原文void Huffman:ReadTextFromFile(char *filename)4ifstream

4、infile(filename);if(!infile)cerr n) /该字符不存在,添加该字符+n;CharMap newchars = new CharMapNoden + 1;memcpy(newchars, chars, n * sizeof(CharMapNode);delete chars;chars = newchars;charsn.c = texti;charsn.weight = 1;3.3 编码void Huffman:MakeCharMap()if (n 1000#include /*数据结构*/哈弗曼树节点typedef struct unsigned int we

5、ight;unsigned int parent;unsigned int lchild;unsigned int rchild;HuffTreeNode,*HuffTree;/字符- 权值-编码映射typedef structchar c;unsigned int weight;char *code;CharMapNode,*CharMap;/*类定义*/class Huffman private:void select(int n, int HuffTree huffTree; /哈弗曼树CharMap chars; /字符表int n; /字符数std:string text; /原文s

6、td:string code; /编码public:void InputCharsWeight();void CountCharsWeight();void Decode();12void ReadTextFromFile(char *filename);void ReadCodeFromFile(char *filename);void SaveTextToFile(char *filename);void SaveCodeToFile(char *filename);void PrintCode();void MakeCharMap();void PrintText();void Prin

7、tCharCode();void PrintCharWeight();void SetCharMap(CharMap m, int number);void Encode();Huffman();virtual Huffman();2、赫夫曼编码算法/ Huffman.cpp#include “Huffman.h“#include #include using namespace std;Huffman:Huffman()huffTree = NULL;chars = NULL;n = 0;Huffman:Huffman()void Huffman:Encode()code = “;for (

8、string:size_type i = 0; i != text.size(); +i)for (int j = 1; j code;void Huffman:Decode()text = “;string:size_type i,count;for (i = 0; i n)+n;CharMap newchars = new CharMapNoden + 1;memcpy(newchars, chars, n * sizeof(CharMapNode);delete chars;chars = newchars;charsn.c = texti;charsn.weight = 1;void

9、Huffman:SaveTextToFile(char *filename)ofstream outfile(filename);if (!outfile)cerr #include “Huffman.h“19using namespace std;int main()cout “ *“ endl;cout “ * *“ endl;cout “ * 哈夫曼编码译码器 *“ endl;cout “ * 1、打开一篇英文文章或输入一篇文章 *“ endl;cout “ * 2、根据字符出现的次数以他们为权值给出哈夫曼编码方式 *“ endl;cout “ * 3、对英文文章进行编码 *“ endl

10、;cout “ * 4、对编码进行译码核对正确性 *“ endl;cout “ * *“ endl;cout “ *“ endlendl;system(“pause“);cout endl;Huffman huffman;huffman.ReadTextFromFile(“text.txt“);cout “程序自动统计字符和权值“ endl;huffman.CountCharsWeight();cout endl;cout “字符及对应权值:“ endl;huffman.PrintCharWeight();cout endl;system(“pause“);cout endl;huffman.

11、MakeCharMap();cout “字符及对应编码:“ endl;huffman.PrintCharCode();cout endl;system(“pause“);cout endl;20cout “对原文进行编码:“ endl;cout “原文:“ endl;huffman.PrintText();huffman.Encode();cout endl;cout “编码:“ endl;huffman.PrintCode();huffman.SaveCodeToFile(“code.txt“);cout endl;system(“pause“);cout endl;cout “对编码进行解

12、码:“ endl;huffman.ReadCodeFromFile(“code.txt“);cout “编码:“ endl;huffman.PrintCode();huffman.Decode();cout endl;cout “原文:“ endl;huffman.PrintText();huffman.SaveTextToFile(“resulttext.txt“);cout endl;return 0;21参 考 文 献1 严蔚敏,数据结构(C 语言版),清华大学出版社,20072 郑莉,C+语言程序设计(第 4 版),清华大学出版社,20103 谭浩强,C 程序设计(第三版) ,清华大学出版社,200522

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 实用文档 > 课程设计

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报