压缩解压文件
实现一个基于哈夫曼树的文件压缩程序和文件解压程序:
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; } }