资源简介
哈夫曼编码(压缩文件),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/C++使用ODBC操作SQL server数据库
- C/C++使用ODBC连接SQL server数据库完整流
- C++基于UDP的控制台局域网聊天程序
- netcdf 4.4.1 c/c++类库windows64位绿色版
- 西北工业大学C/C++程序设计大作业包含
- 《C/C++中国象棋程序入门与提高》源代
- C/C++:Windows编程—调用DLL程序的2种方
- C/C++帮助文档2019版4月出品的超级详细
- 最全 C/C++ API文档
- C++Primer中文版(第4版)
- 哈夫曼编码/译码器 完整版课程数据结
- 猫脸变换算法(Arnold)的简单实现C
- c++课程设计模拟计算器含源代码、文
- C/C++标准库源代码
- RFIDC/C++门禁系统 RFID源码
- C/C++数据结构_随机10000个数:排序~8大
- 特征码搜索基址 c/c++源代码
- 哈夫曼编码vc++6.0
- 用哈夫曼编码压缩文件
- LeetCode题解 C/C++版
- 课程设计源码.zip
- C/C++参考手册大全5本集合.chm
- 猜词游戏 C/C++程序设计
- eclipse c/c++ 自动补全,auto activation,自
- MFC/C++画柱状图及饼状图
- NLopt-非线性规划的C/C++代码
- C语言课设,学生证管理系统
- C/C++使用遗传算法解决车辆路径问题
- c/c++源码浏览工具卷2
评论
共有 条评论