0001 /****************************************************************************************** 0002 * 无论编码森林由列表、完全堆还是左式堆实现,本测试过程都可适用 0003 * 编码森林的实现方式采用优先级队列时,编译前对应的工程只需设置相应标志: 0004 * DSA_PQ_List、DSA_PQ_ComplHeap或DSA_PQ_LeftHeap 0005 ******************************************************************************************/ 0006 int main ( int argc, char* argv[] ) { //Huffman编码算法统一测试 0007 int* freq = statistics ( argv[1] ); //根据样本文件,统计各字符的出现频率 0008 HuffForest* forest = initForest ( freq ); release ( freq ); //创建Huffman森林 0009 HuffTree* tree = generateTree ( forest ); release ( forest ); //生成Huffman编码树 0010 HuffTable* table = generateTable ( tree ); //将Huffman编码树转换为编码表 0011 for ( int i = 2; i < argc; i++ ) { //对于命令行传入的每一明文串 0012 Bitmap* codeString = new Bitmap; //二进制编码串 0013 int n = encode ( table, codeString, argv[i] ); //将根据编码表生成(长度为n) 0014 decode ( tree, codeString, n ); //利用Huffman编码树,对长度为n的二进制编码串解码 0015 release ( codeString ); 0016 } 0017 release ( table ); release ( tree ); return 0; //释放编码表、编码树 0018 } //release()负责释放复杂结构,与算法无直接关系,具体实现详见代码包