Huffman編碼的實現

2021-06-20 18:57:00 字數 1026 閱讀 6125

#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...