资源简介
数据结构的哈夫曼树,能输入任意字符串,并计算出现频率,同时统计编码长度,可编码,可解码,能计算压缩比,可执行程序包括实验报告
代码片段和文件信息
#include
#include
#define max 100
char cha[max]string[max];
char Hcode[max-1][max];
struct huftree //huffman节点存储结构
{
int weight;
int lchild;
int rchild;
int parent;
};
class Huff
{
public:
void selectmin(huftree tree[]int k); //权值最小的两个节点
void huffman(huftree tree[]int *wint n); //生成huffman树
void CreateTable(huftree tree[]char code[]int nint len[]int weight[]int length1); //生成哈夫曼编码
void encode(int n); //将从键盘上接收的字符转变为哈夫曼编码
void decode(char ch[]huftree tree[]int n); //将从键盘上接收的二进制码解码为字符
private:
int min1;
int min2;
};
void Huff::selectmin(huftree tree[]int k) //找出权值最小的两个节点
{
int i;
for (i=1;i<=k && tree[i].parent!=0 ;i++);
min1=i;
for (i=1;i<=k;i++)
if (tree[i].parent==0 && tree[i].weight min1=i;tree[i].weight=max;
for (i=1;i<=k;i++)
if (tree[i].parent==0 && i!=min1)
break;
min2=i;
for (i=1;i<=k;i++)
if ( tree[i].parent==0 && i!=min1 && tree[i].weight min2=i;tree[i].weight=max;
}
void Huff::huffman(huftree tree[]int *wint n) //生成huffman树
{
int mi;
if (n<=1) return;
m=2*n-1;
for (i=1;i<=n;i++)
{
tree[i].weight=w[i]; tree[i].parent=0;
tree[i].lchild=0; tree[i].rchild=0;
}
for (i=n+1;i<=m;i++)
{
tree[i].weight=0; tree[i].parent=0;
tree[i].lchild=0; tree[i].rchild=0;
}
for (i=n+1;i<=m;i++)
{
selectmin(tree i-1);
tree[min1].parent=i;
tree[min2].parent=i;
tree[i].lchild=min1;
tree[i].rchild=min2;
tree[i].weight =tree[min1]. weight+ tree[min2].weight;
}
}
void Huff::CreateTable(huftree tree[]char code[]int nint len[]int weight[]int length1) //生成哈夫曼编码
{
int startcipm;
code[n-1]=‘\0‘;
float length2=0;
cout<<“各字符的哈夫曼编码为:“< for(i=1;i<=n;i++)
{
m=0;
start=n-1;
for(c=ip=tree[i].parent;p!=0;c=pp=tree[p].parent)
{
if(tree[p].lchild==c)
code[--start]=‘0‘;
else
code[--start]=‘1‘;
m++;
}
strcpy(Hcode[i]&code[start]);
cout< len[i]=m;
}
cout< for(int j=0;j<=n;j++)
length2+=len[j]*weight[j];
length2=length2/8;
cout<<“编码后字符串的大小为:“< <<“压缩比为:“< }
void Huff::encode(int n) //将从键盘上接收的字符转变为哈夫曼编码
{
cout< for (int i=0;string[i]!=‘\0‘;i++)
{
for(int j=0;string[i]!=cha[j]&&j<=n;) j++;
if (j<=n) cout< }
cout< }
void Huff::decode(char ch[]huftree tree[]int n) //将从键盘上接收的二进制码解码为字符
{
int ijm;char b;
m=2*n-1;
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 233568 2010-12-23 23:50 ffffeeee\Debug\ffffeeee.exe
文件 262088 2010-12-23 23:50 ffffeeee\Debug\ffffeeee.ilk
文件 250324 2010-12-23 23:50 ffffeeee\Debug\ffffeeee.pch
文件 443392 2010-12-23 23:50 ffffeeee\Debug\ffffeeee.pdb
文件 18276 2010-12-23 23:50 ffffeeee\Debug\main.obj
文件 41984 2010-12-27 20:41 ffffeeee\Debug\vc60.idb
文件 61440 2010-12-23 23:50 ffffeeee\Debug\vc60.pdb
文件 4304 2010-12-23 23:52 ffffeeee\ffffeeee.dsp
文件 524 2010-12-23 23:49 ffffeeee\ffffeeee.dsw
文件 41984 2010-12-27 20:42 ffffeeee\ffffeeee.ncb
文件 53760 2010-12-27 20:42 ffffeeee\ffffeeee.opt
文件 250 2010-12-27 20:41 ffffeeee\ffffeeee.plg
文件 4694 2010-12-23 23:50 ffffeeee\main.cpp
文件 162816 2010-12-23 19:07 ffffeeee\哈夫曼编(解)码器.doc
目录 0 2010-12-23 23:50 ffffeeee\Debug
目录 0 2010-12-27 20:42 ffffeeee
----------- --------- ---------- ----- ----
1579404 16
- 上一篇:捷联惯导c语言仿真
- 下一篇:《数据结构——C++实现》第二版课本源代码
相关资源
- 《数据结构——C++实现》第二版课本
- tcp socket实现单进程单线程 高并发服务
- 八数码的深度优先算法c++实现
- C++实现灰度图像的边缘检测、提取及
- 摄影测量直接线性变换DLTVC++程序代码
- 用VC++6.0开发监控界面的方法
- 用Visual C++仿真实现卡尔曼滤波
- libstdc++.so.6.0.17
- c++写的操作系统课程设计:模拟文件
- C++编写的航空客运订票系统
- MFC 界面编程13个
- MFC入门教程:1天深入浅出MFC
- listing_4.1.cpp
- 摄影测量空间后方交会程序合集,含
- 数据结构课程设计《活期储蓄帐目管
- 进程调度的设计与实现代码C++
- window平台下c++ 对zip压缩解压缩工程源
- 人工智能旅行商问题实验报告及C++源
- VC++ 基于IE内核功能很齐全的浏览器(
- c++实现最简单的COM
- (转)VC老版主薄荷用VC++6.0写的TCP
- C++ 矩阵乘并行算法实现
- c++ 贪食蛇控制台游戏代码,不闪屏功
- C++实现音频录音wav格式
- 唯一可译码判决准则 1使用的编程:
- x新安江模型c++
- C++停车场管理系统的完整代码.txt
- C++经典试题附答案
- c++数组查找函数实现
- c++递归实现数组遍历和阶乘函数
评论
共有 条评论