资源简介
哈夫曼编码(压缩文件),c/c++课程设计,附带程序运行用例以及讲解答辩PPT,程序清晰易懂

代码片段和文件信息
#include
#include
#define ASCIIL 256
#define F(x) ((x-1)>>1)
#define L(x) ((x<<1)+1)
#define R(x) ((x<<1)+2)
#define SWAP(abtmp) {tmp=a;a=b;b=tmp;}
using namespace std;
//实现二叉堆模板类,小顶堆
template
class CHeap
{
HeapType *datatmp;
int size;
void HeapUp(int ix)
{//自底向顶维护堆
int f;
for(f=F(ix);ix&&data[ix] SWAP(data[ix]data[f]tmp);
}
void HeapDown(int ix)
{//自顶向底维护堆
int lrt;
HeapType mintmp;
if(ix>=size) return ;
l=L(ix)r=R(ix);
min=data[ix]t=ix;
if(l t=lmin=data[l];
if(r t=rmin=data[l];
SWAP(data[ix]data[t]tmp);
if(ix!=t) HeapDown(t);
}
public:
CHeap()
{//这里特殊应用,堆内元素个数不超过256
size=0;
data=new HeapType[256];
}
~CHeap()
{//释放内存
delete [] data;
}
int getsize()
{//返回堆大小
return size;
}
void clear()
{//清空堆
size=0;
}
void insert(HeapType e)
{//向堆尾中插入元素,并向顶维护堆
data[size++]=e;
HeapUp(size-1);
}
HeapType top()
{//从堆顶取出元素,并向底维护堆
HeapType ret=data[0];
data[0]=data[--size];
HeapDown(0);return ret;
}
};
//哈夫曼树结点结构体实现
typedef struct talNode{
unsigned char c; //叶结点时对应ASCII值
int weight; //该结点权值
int ltrt; //左、右结点下标
talNode(){}
talNode(unsigned char _cint _p):
c(_c)weight(_p)lt(-1)rt(-1)
{}
talNode(unsigned char _cint _pint lint r)
:c(_c)weight(_p)lt(l)rt(r)
{}
bool operator < (talNode a)
{//重载运算符“<”用于二叉堆内的比较
return weight }
}HuffNode;
class CHuffMan{
HuffNode arr[512]; //哈夫曼树结点数组
int size; //哈夫曼树结点个数
bool code[256][64]; //ASCII对应编码方案
int lenth[256]; //ASCII对应编码长度
//lastcodelenthps[256]用于存储压缩文件中作为文件头
int lastcodelenth; //文件最后一个字符实用几位
int ps[256]; //ASCII对应出现频率
int soucelentargetlen; //源及目标文件长度
//私有成员函数,用于实现内部功能
void SetHuffTree(int []); //根据字符频率生成哈夫曼树
void SetHuffCode(int bool []int );//根据哈夫曼树生成编码方案
void CreateHuff(int []); //创建哈夫曼树及编码方案
void EnCodePre(char []); //压缩前预处理
void DeCodePre(FILE *); //解压前预处理
void SaveHuffHead(FILE *); //保存压缩文件头
void ReadHuffHead(FILE *); //读取压缩文件头
public:
CHuffMan(){Clear();} //构造函数
~CHuffMan
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 4546 2018-05-23 10:36 哈夫曼\1234.txt
文件 3490 2018-05-29 20:55 哈夫曼\2345.huf
文件 4546 2018-05-29 21:05 哈夫曼\3456.txt
文件 905247 2018-05-23 11:25 哈夫曼\信息化教学设计ppt模板(2)(1).pptx
文件 14451 2018-05-23 10:26 哈夫曼\压缩文件(哈夫曼树).cpp
文件 1943033 2018-05-29 20:53 哈夫曼\压缩文件(哈夫曼树).exe
目录 0 2020-01-28 18:01 哈夫曼
----------- --------- ---------- ----- ----
2875313 7
- 上一篇:学生管理系统 mfc 数据库 c++
- 下一篇:c语言复习专用
相关资源
- 北京化工大学计算方法(C/C++)讲义
- GBT 28169-2011 嵌入式软件 C语言编码规范
- XUnZip Zip解压缩.rar
- Windows_API_函数大全 C/C++
- C语言程序设计教材习题参考答案.do
- 基于MFC的VC++仿QQ浏览器源码(雏形)
- 高效FFT的C/C++代码实现包括基2的DIF和
- c/c++开发网络验证和本地验证
- 操作系统存储管理实验报告c/c++
- C++编写的万年历源码
- C语言进阶源码---基于graphics实现图书
- 井字棋三连棋的AI实现,C/C++
- 《水果忍者》设计报告.doc
- MFC实现的红绿灯程序
- Win32简易画图程序
- C++网络爬虫项目
- 泡泡堂(炸弹人)小游戏C/C++完整源码
- 使用C/C++读取BITMAP的内容
- VC图像处理-用Canny算子提取边缘
- C/C++视频教程
- 个人总结的一些C/C++编码规范
- 高斯消去法求解线性方程组C/C++程序输
- celrityC/C++源码查看工具
- c++ 数据结构 哈夫曼压缩&解压软件 控
- 网络编程MFC 实验四 FTP客户端功能实现
- C/C++语言大作业、小游戏
- 完整的C/C++时序的B+树数据库系统实现
- 哈夫曼压缩和解压c++源码
- Eclipse C/C++ 自动补全的cdt补丁
- MongoDB C/C++开发使用案例Demo
评论
共有 条评论