哈夫曼樹-貪心算法的應(yīng)用實例
[導(dǎo)讀]/*
*哈夫曼編碼-鏈?zhǔn)浇Y(jié)構(gòu)
*
*功能實現(xiàn):
* 源文件字符權(quán)值確認操作
* 哈夫曼樹的建立操作
* 字符字典的建立操作
* 源文件轉(zhuǎn)碼操作操作
* 二進制文件譯碼操作
* 文件輸出操作
/*
*哈夫曼編碼-鏈?zhǔn)浇Y(jié)構(gòu)
*
*功能實現(xiàn):
* 源文件字符權(quán)值確認操作
* 哈夫曼樹的建立操作
* 字符字典的建立操作
* 源文件轉(zhuǎn)碼操作操作
* 二進制文件譯碼操作
* 文件輸出操作
* 內(nèi)存清理操作
*/
#include
#include
#define _HFMAlgorithm_
#define codesize 30
//哈夫曼樹結(jié)點定義
typedef struct forest{
struct forest *left;
struct forest *right;
struct forest *parent;
unsigned int weight;
char word;
}HFMNode;
//字符字典結(jié)點定義
typedef struct hfmtable{
char word;
char code[codesize];
int start;//標(biāo)記起始位置
struct hfmtable *next;
}Table;
//函數(shù)聲明
HFMNode * ReadFile(void);
HFMNode * CreateHFMTree(HFMNode *F);
void HFMCode(HFMNode * root,Table * &table);
void PrintHFMTree(HFMNode *root);
void PrintTable(Table *t);
void TransCoding(Table * table);
void ReTransCoding(HFMNode * root);
void SelectFile(void);
void PrintFileInformation(char FileName[]);
void DestroyHFMTree(HFMNode *root);
void DestroyTable(Table *table);
//讀取源文件,確認各字符權(quán)值建立森林
HFMNode * ReadFile(void)
{
HFMNode *head,*p;
FILE *fp = NULL;
char a;
//創(chuàng)建表頭結(jié)點
head = (HFMNode *)malloc(sizeof(HFMNode));
head->left = head->right = head->parent = NULL;
head->word = '