压缩解压文件

实现一个基于哈夫曼树的文件压缩程序和文件解压程序:

1)求压缩程序读入源文件,分析每种字符的频度,然后建立相应的哈夫曼树,再求出相应哈夫曼编码,根据编码对源文件进行压缩,得到源文件对应的压缩文件。

2) 解压程序读入压缩文件,根据相应的哈夫曼编码解压还原,得到对应的源文件。

3)求出压缩率;

//存储结构
struct HTnode
{                   
long weight;    
int parent;   
int lchild;   
int rchild;    
int *code;    
int codelen;   
HTnode()
{
weight = MAX;        
parent = -1;        
lchild = -1;        
rchild = -1;        
codelen = 0; 
}
}HTnode;
//创建哈夫曼树
void huffmanTree::create()
{
 for(int i=leaf; i<2*leaf-1; i++)
 {
 int loc1=-1, loc2=-1;
 for(int j=0; j<i; j++){
 if(HT[j].parent != -1)
 continue;
 if(loc1==-1 || HT[j].weight < HT[loc1].weight)
 {
 loc2 = loc1;
 loc1 = j;
 }
 else if(loc2==-1 || HT[j].weight < HT[loc2].weight)
 loc2 = j;
 }
 if(HT[loc1].weight==MAX || HT[loc2].weight==MAX || loc2==-1)
 break;
 HT[i].weight = HT[loc1].weight + HT[loc2].weight;

 HT[i].lchild = loc1>loc2 ? loc2 : loc1;
 HT[i].rchild = loc1>loc2 ? loc1 : loc2;
 HT[loc1].parent = i; HT[loc2].parent = i;
 root = i;
 }
}
posted @ 2022-07-13 15:55  今天又双叒叕在敲代码  阅读(21)  评论(0编辑  收藏  举报