資源簡介
發送端通過一個編碼系統對待傳數據預先編碼,在接收端將傳來的數據進行譯碼。
(1)接收原始數據: 從終端讀入字符集大小n,n個字符和n個權值,建立哈夫曼樹,存于文件hfmtree.dat中。
(2)編碼: 利用已建好的哈夫曼樹(如不在內存,則從文件hfmtree.dat中讀入)對文件中的正文進行編碼,然后將結果存入文件codefile.dat中。
(3)譯碼: 利用已建好的哈夫曼樹將文件codefile.dat中的代碼進行譯碼,結果存入文件textfile.dat 中。
(4)打印編碼規則:即字符與編碼的一一對應關系。
(5)打印哈夫曼樹:將已在內存中的哈夫曼樹以直觀的方式顯示在終端上。
代碼片段和文件信息
#include?
#include?
#include?
#include?
#define?NULL?0
//#define?OK?1
//#define?ERROR?0
//#define?OVERFLOW?-2
#define?MAX_NUM?10000
#define?MAX?60
int?j=0;
typedef?int?Status;
typedef?char?**HuffmanCode;
typedef?struct{
?????unsigned?int????weight;//字符對應的權值?
?????unsigned?int????parentlchildrchild;
}HTNode*HuffmanTree;//此處定義了哈夫曼樹節點的數據類型。提供給Huffman使用
typedef?struct{
?????HuffmanTree?HT;
?????char?????????*c;//存放將要建立哈夫曼樹的字符
?????int??????????longth;//字符的大小,即開始第一步輸入的一個整數
?????HuffmanCode?HC;//存放對應的哈夫編碼即對應的01代碼
}Huffman;
void?Select(HuffmanTree?HTint?endint?*s1int?*s2)
//把輸入的字符按權值從小到大排序,挑出最小權值供HuffmanCoding()調用
//并且根節點的權值等于他的左右孩子的權值和
//min2是在剩下的字符中挑出的最小的勸值的字符
{
???int?i;
???int?min1=MAX_NUM;//min1是根節點的權值
???i
評論
共有 條評論