收藏 分享(赏)

哈夫曼编码与译码(附源码).doc

上传人:weiwoduzun 文档编号:5622876 上传时间:2019-03-10 格式:DOC 页数:23 大小:556.50KB
下载 相关 举报
哈夫曼编码与译码(附源码).doc_第1页
第1页 / 共23页
哈夫曼编码与译码(附源码).doc_第2页
第2页 / 共23页
哈夫曼编码与译码(附源码).doc_第3页
第3页 / 共23页
哈夫曼编码与译码(附源码).doc_第4页
第4页 / 共23页
哈夫曼编码与译码(附源码).doc_第5页
第5页 / 共23页
点击查看更多>>
资源描述

1、建立 Huffman 树进行编码和译码的设计郝萌 1100300423 哈尔滨工业大学计算机科学与技术学院 1003104 班摘要:建立一个简易的系统,对于给定的一篇英文文章,统计字符出 现的概率,并根据概率建立 Huffman 树,利用 Huffman 编码 对文章进行编码和译码。掌握 Huffman 树的建立与应用,并进 一步熟练掌握程序的设计流程。关键词:Huffman 树 Huffman 编码 文章译码 文件压缩 解压缩1.引言:给定一篇文章,统计字符出现的概率,根据概率建立哈夫曼树,并进行哈夫曼编码,进而可以利用哈夫曼编码对文章进行编码与译码和文件压缩、解压缩等操作。2.程序设计流程

2、(1)文字表述开始进入功能选择界面,包含五种操作:1.读取文章并对字符编码,2.哈夫曼编码信息,3.文章编码,4.文章译码,5.文件压缩,6.文件解压缩,7.退出程序。操作 1:给定一篇文章,统计字符出现的概率,并根据概率建立 Huffman 树,并利用 Huffman 树对字符进行Huffman 编码。操作 2:显示 Huffman 编码信息,包括字符,字符出现的概率,Huffman 编码。操作 3:对文章进行译码,显示译码信息,并保存。操作 4:对文章进行译码,显示并保存。操作 5:对文件进行压缩,每 7 位二进制序列对应一个 ASCII 码。操作 6:对文件进行解压缩。(2)流程图程序开

3、始程序主界面读取文章并对字符编码哈夫曼编码信息 文章编码 文章译码 退出程序显示文章编码 保存文章编码 返回上一界面显示文章编码的译码保存文章编码的译码程序结束文件压缩 文件解压缩(3)程序数据要求及功能实现 主界面1.读取文件并对字符进行编码2.哈夫曼编码信息3.文件编码(1)显示文件编码(2)保存文件编码4.文件译码(1)显示文章编码的译码(2)保存文章编码的译码5.文件压缩6.文件解压缩附:程序源代码 /* * File: HUFFMANFUNCTION.h* Author: Administrator* Created on 2011 年 12 月 19 日, 下午 6:19*/#if

4、ndef HUFFMANFUNCTION_H#define HUFFMANFUNCTION_H#include #include#include#include#define max1 150#define max2 50#define max3 256using namespace std;class Htnote public:char name; /字符名double weight; /权重int lchild; /左孩子int rchild; /右孩子int parent; /父亲Htnote() weight = 0;lchild = -1;parent = -1;rchild =

5、-1;class Name public:int num; /字符出现的次数char pname; /字符名double lweight; /权值Name() num = 0;lweight = 0;class GetName public:char namefmax2;int n; /字符的种类int sum; /字符的总数Name lettermax1; /存储字符信息的类的数组GetName() sum = 0;n = 0;void GetWeight()/得到字符的权值for (int i = 0; i namef;input.open(namef); /打开文件if (input.f

6、ail() cout = 0) if (HuffmanTf.lchild = c)/如果为左孩子,为0cd-start = 0; else/如果为右孩子,为1cd-start = 1;c = f;strcpy(Codei.bits, /将结果存入对应的编码数组中void OutputHuffmanTCode() cout namef1;output.open(namef1);char ch;while (!input.eof() ch = input.get();for (int i = 0; i namef;input.open(namef);if (input.fail() cout =

7、0) c = HuffmanTc.lchild;if (HuffmanTc.lchild = -1)/判断是否到叶子cout = 0) c = HuffmanTc.rchild;if (HuffmanTc.rchild = -1)/判断是否到叶子cout namef;input.open(namef);if (input.fail() cout namef1;output.open(namef1);char ch;ch = input.get();int c = 2 * L.n - 2;while (!input.eof() if (ch = 0) if (HuffmanTc.lchild =

8、 0) c = HuffmanTc.lchild;if (HuffmanTc.lchild = -1) output.put(HuffmanTc.name);c = 2 * L.n - 2;if (ch = 1) if (HuffmanTc.rchild = 0) c = HuffmanTc.rchild;if (HuffmanTc.rchild = -1) output.put(HuffmanTc.name);c = 2 * L.n - 2;ch = input.get();input.close();output.close();cout namef2;File1.open(namef2)

9、;File2.open(namef1);if (File2.fail() cout namef2;input.open(namef2, ios:in | ios:binary);output.open(namef1, ios:out | ios:binary);if (input.fail() cout (char sh;char th = ch;input.read(reinterpret_cast (int count;char num;char t = 0;char p = 1;while (!input.eof() sh = th;th = ch;input.read(reinterp

10、ret_cast (count = sh;if (ch != EOF) for (int i = 0; i (count = count / 2;if (ch = EOF) for (int i = 0; i (count = count / 2;if (count = 0) break;for (int i = 0; i (output.close();input.close();/解压文件fstream File1;fstream File2;char namef3max2;cout namef3;File2.open(namef1, ios:in | ios:binary);File1.

11、open(namef3);if (File2.fail() cout (int c = 2 * L.n - 2;while (!File2.eof() if (ch = 0) if (HuffmanTc.lchild = 0) c = HuffmanTc.lchild;if (HuffmanTc.lchild = -1) cout (c = 2 * L.n - 2;if (ch = 1) if (HuffmanTc.rchild = 0) c = HuffmanTc.rchild;if (HuffmanTc.rchild = -1) cout (c = 2 * L.n - 2;File2.re

12、ad(reinterpret_cast (cout #include “HUFFMANFUNCTION.h“using namespace std;/*/int main(int argc, char* argv)Function *a = new Function;while (1)/主界面显示cout “ 请选择功能: “;cin ch;switch (ch)case 1:/读取文章并对字符编码delete a;a = new Function;system(“cls“);a-CreatHT();a-CharHuffmanTCoding();cout OutputHuffmanTCode(

13、);system(“pause“);system(“cls“);break;case 3:/文章编码system(“cls“);while (1)cout 1.显示文章编码“ 2.保存文章编码“ 3.返回上一界面“ 请选择功能:“;cin ch1;switch (ch1)case 1:/显示文章编码system(“cls“);a-OutArticleCode();system(“pause“);system(“cls“);continue;case 2:/保存文章编码system(“cls“);a-SaveArticleCode();system(“pause“);system(“cls“);

14、continue;case 3:/返回上一界面break;default:system(“cls“);cout 1.显示文章编码的译码“ 2.保存文章编码的译码“ 3.返回上一界面“ 请选择功能:“;cin ch1;switch (ch1)case 1:/显示文章编码的译码system(“cls“);a-OutTransCode();system(“pause“);system(“cls“);continue;case 2:/保存文章编码的译码system(“cls“);a-SaveTransCode();system(“pause“);system(“cls“);continue;case 3:/返回上一界面break;default:system(“cls“);cout FileCompression();system(“pause“);system(“cls“);continue;case 6:system(“cls“);a-FileDecompression();system(“pause“);system(“cls“);continue;case 7:return 0;default:system(“cls“);cout “功能选择错误,请重新输入!“ endl;break;return 0;

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

当前位置:首页 > 企业管理 > 经营企划

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


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

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

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