#include #include #define maxbit 100 /*定義哈夫曼編碼的最大長度*/
#define maxvalue 100000 /*定義最大權值*/
#define maxleaf 300 /*定義哈夫曼樹中最多葉子節點個數*/
#define maxnode maxleaf*2-1 /*哈夫曼樹最多結點數*/
using namespace std;
typedef struct/*哈夫曼編碼資訊的結構*/
hcodetype;
typedef struct/*哈夫曼樹結點的結構*/
hnodetype;
void huffmantree(hnodetype huffnode[maxnode],int n) /*構造哈夫曼樹的函式*/
for(i = 0; i < n; i++) /*輸入入n個葉子節點的權值*/
for(i = 0; i < n-1; i++) /*開始迴圈構造哈夫曼樹*/
else if(huffnode[j].weight < m2 && huffnode[j].parent == -1)
}huffnode[x1].parent = n+i;
huffnode[x2].parent = n+i;
huffnode[n+i].weight = huffnode[x1].weight + huffnode[x2].weight;
huffnode[n+i].lchild = x1;
huffnode[n+i].rchild = x2;
}}int main()
for(j = cd.start + 1; j < n; j++) /*儲存求出的每個葉節點的哈夫曼編碼和編碼的起始位*/
huffcode[i].start = cd.start;
}for(i = 0; i < n; i++) /*輸出每個葉子節點的哈夫曼編碼*/
printf("\n");
}return 0;
}
Huffman編碼的實現
這裡的huffman編碼就是離散數學中學的最優二叉樹,現在我們用c 來實現它。首先考慮實現它使用的資料結構,當然這裡肯定使用二叉樹。其次就是儲存方式,對於樹一般情況是用間接儲存也就是鍊錶。但是二叉鍊錶不方便尋找雙親節點,這裡使用向量更好,對儲存空間的利用率也較高。建立資料結構 huffman樹中每個...
Huffman編碼C 實現
huffman.h 葉子結點為n的哈夫曼樹共有2n 1個結點 ifndef huffman h define huffman h class huffmannode huffmannode const char data,const double wt,const int pa 1,const in...
Huffman編碼C實現
huffman編碼 根據huffman樹進行編碼的,用到的資料結構是二叉樹。typedef int elemtype typedef struct binarytree 2 構建最優二叉樹 void createhuffman int leafnum,binarytree huffmantree e...