资源简介
功能:1、初始化:能够对输入的任意长度的字符串s进行统计,统计每个字符的频度并建立赫夫曼树
2、建立编码表:利用已经建好的赫夫曼树进行编码,并将每个字符的编码输出。
3、编码:根据编码表对输入的字符串进行编码,并将编码后的字符串输出。
4、译码:利用已经建好的赫夫曼树对编码后的字符串进行译码,并输出译码结果。
代码片段和文件信息
// HuffmanTree.cpp:
#include “HuffmanTree.h“
#include“iostream.h“
/*
* 前置条件:哈弗曼树不存在
* 输 入:无
* 功 能:初始化哈弗曼树
* 输 出:无
* 后置条件:创建一个空哈弗曼树
*/
HuffmanTree::HuffmanTree()
{
for(int i=0;i {
w[i].weight=0;
w[i].a=NULL;
s[i]=NULL;
}
for( i=0;i {
code[i]=-1;
}
Count();
i=0;
while((w[i].a!=NULL))
{
i++;
}
m=i;
InitHuffmanTree();
}
/*
* 前置条件:哈弗曼树已存在
* 输 入:无
* 功 能:销毁哈弗曼树
* 输 出:无
* 后置条件:释放哈弗曼树所占用的存储空间
*/
HuffmanTree::~HuffmanTree()
{
}
/*
* 前置条件:存在一个空哈弗曼树
* 输 入:字符串数组
* 功 能:初始化哈弗曼树
* 输 出:无
* 后置条件:哈弗曼树被初始化
*/
void HuffmanTree::InitHuffmanTree()
{
for (int i=0; i<2*m-1; i++) //初始化
{
huffmantree [i].parent= -1;
huffmantree [i].lchild= -1;
huffmantree [i].rchild= -1;
huffmantree[i].data.weight=100;
}
for (i=0; i {
huffmantree[i].data.weight=w[i].weight;
huffmantree[i].data.a=w[i].a;
}
for (int k=m; k<2*m-1; k++) //n-1次合并
{
SelectCombine(km); //在哈弗曼树中找权值最小的两个结点并合并
}
}
void HuffmanTree::ReInit()
{
for(int i=0;i {
w[i].weight=0;
w[i].a=NULL;
s[i]=NULL;
}
for( i=0;i {
code[i]=-1;
}
Count();
i=0;
while((w[i].a!=NULL))
{
i++;
}
m=i;
InitHuffmanTree();
}
/*
* 前置条件:存在一个非空哈弗曼树
* 输 入:无
* 功 能:建立编码表利用已经建好的赫夫曼树进行编码,并将每个字符的编码输出
* 输 出:每个字符的编码
* 后置条件:编码表完成
*/
void HuffmanTree::CreateTableHuffmanTree()
{
Code cd;
int cpj;
for(int i=0;i {
cd.start=m-1;
c=i;
p=huffmantree[c].parent;
while(p!=-1)
{
if(huffmantree[p].lchild==c)
cd.code[cd.start]=0;
else
cd.code[cd.start]=1;
cd.start--;
c=p;
p=huffmantree[c].parent;
}
for(j=cd.start+1;j Huffcode[i].code[j]=cd.code[j];
Huffcode[i].start=cd.start;
}
cout<<“编码成功!“< cout<<“编码结果如下:“< for(i=0;i {
cout< for(j=Huffcode[i].start+1;j cout< }
}
/*
* 前置条件:编码表完成
* 输 入:无
* 功 能:编码,根据编码表对输入的字符串进行编码,并将编码后的字符串输出
* 输 出:编码后的字符串
* 后置条件:编码完成
*/
void HuffmanTree::Encoding()
{
cout<<“对输入字符串的编码如下:“< int k=0ij=0p;
while(s[k]!=NULL)
{
for(i=0;i {
if(huffmantree[i].data.a==s[k])
{
for(p=Huffcode[i].start+1;p {
cout< code[j++]=Huffcode[i].code[p];
}
}
}
k++;
}
cout< }
/*
* 前置条件:编码完成
* 输 入:无
* 功 能:译码,利用已经建好的赫夫曼树对编码后的字属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
.CA.... 196724 2003-02-27 02:26 08212291_王碧珺_实验三_哈夫曼树\Debug\experiment03_2.exe
.CA.... 317728 2003-02-27 02:26 08212291_王碧珺_实验三_哈夫曼树\Debug\experiment03_2.ilk
.CA.... 43520 2009-11-22 18:13 08212291_王碧珺_实验三_哈夫曼树\Debug\experiment03_2.opt
.CA.... 248812 2003-02-27 02:24 08212291_王碧珺_实验三_哈夫曼树\Debug\experiment03_2.pch
.CA.... 533504 2003-02-27 02:24 08212291_王碧珺_实验三_哈夫曼树\Debug\experiment03_2.pdb
.CA.... 20040 2003-02-27 02:24 08212291_王碧珺_实验三_哈夫曼树\Debug\HuffmanTree.obj
.CA.... 7645 2003-02-27 02:26 08212291_王碧珺_实验三_哈夫曼树\Debug\main.obj
.CA.... 58368 2003-02-27 02:26 08212291_王碧珺_实验三_哈夫曼树\Debug\vc60.idb
.CA.... 69632 2003-02-27 02:24 08212291_王碧珺_实验三_哈夫曼树\Debug\vc60.pdb
.CA.... 4498 2009-11-22 01:10 08212291_王碧珺_实验三_哈夫曼树\experiment03_2.dsp
.CA.... 536 2009-11-20 21:52 08212291_王碧珺_实验三_哈夫曼树\experiment03_2.dsw
.CA.... 50176 2003-02-27 02:38 08212291_王碧珺_实验三_哈夫曼树\experiment03_2.ncb
.CA.... 53760 2003-02-27 02:38 08212291_王碧珺_实验三_哈夫曼树\experiment03_2.opt
.CA.... 944 2003-02-27 02:26 08212291_王碧珺_实验三_哈夫曼树\experiment03_2.plg
.CA.... 6778 2003-02-27 02:24 08212291_王碧珺_实验三_哈夫曼树\HuffmanTree.cpp
.CA.... 1724 2003-02-27 02:24 08212291_王碧珺_实验三_哈夫曼树\HuffmanTree.h
.CA.... 1132 2003-02-27 02:16 08212291_王碧珺_实验三_哈夫曼树\main.cpp
.C.D... 0 2003-02-27 00:09 08212291_王碧珺_实验三_哈夫曼树\Debug
.C.D... 0 2003-02-27 00:09 08212291_王碧珺_实验三_哈夫曼树
----------- --------- ---------- ----- ----
1615521 19
- 上一篇:WeTalk.zip
- 下一篇:c语言实现电子时钟课程设计
相关资源
- C++获取计算机的CPU ID,硬盘序列号等
- C++头文件转delphi工具 + 源码
- 基于MFC的TCP调试助手源码95706
- 国际象棋的qt源代码
- C语言开发实战宝典
- C++中头文件与源文件的作用详解
- C++多线程网络编程Socket
- VC++ 多线程文件读写操作
- 利用C++哈希表的方法实现电话号码查
- 移木块游戏,可以自编自玩,vc6.0编写
- C++纯文字DOS超小RPG游戏
- 小甲鱼C语言课件 源代码
- 安科瑞智能电能表MODBUS通讯程序 VC6
- VC++MFC小游戏实例教程(实例)+MFC类库
- c语言看发的网络协议 ,源代码
- C语言实现的DES对称加密算法
- 数据结构,迷宫问题C语言版源代码
- C语言 学生信息管理系统 源代码
- C语言版3D魔方游戏源代码
- 连铸温度场计算程序(C++)
- 6自由度机器人运动学正反解C++程序
- Em算法(使用C++编写)
- libstdc++-4.4.7-4.el6.i686.rpm
- VC++实现CMD命令执行与获得返回信息
- 白话C++(全)
- C++标准库第1、2
- 大数类c++大数类
- C++语言编写串口调试助手
- c++素数筛选法
- QT5开发及源代码
川公网安备 51152502000135号
评论
共有 条评论