哈夫曼樹的這個實驗我是採用常用的左『0』右『1』來實現的,輸入是用文字輸入的,大家在用之前目錄下要記得建立「ht.txt」檔案o,下面的測試用例也是同樣方法噠,不會使用file進行讀取檔案的小夥伴,可以先簡單閱覽:測試用例之file使用
#define _crt_secure_no_warnings
#include#include#include#define maxsize 50
#define maxsize 400
#define ok 1;
#define overflow -2;
#define status int
typedef struct htnode htnode;
//haffnode [maxsize];
typedef htnode* hafftree;
typedef char* hcnode;
typedef hcnode* haffcode;
void inittree(hafftree* ht);
status createtree(file* fp, hafftree* ht);
status select_ht(hafftree ht, int end, int* order_1, int* order_2);
//在哈夫曼樹的結點[1,.....,n]依次去選出權值最小並且還未
//入樹的結點的序號
status haffcodeing_ht_1(hafftree ht, haffcode* hc);//逆序的計算
//status haffcodeing_ht_2(hafftree ht, haffcode* hc);
void showhafftree(hafftree ht);//展示哈夫曼樹
void showhaffcode(hafftree ht, haffcode hc);
void inittree(hafftree* ht)
status createtree(file* fp, hafftree* ht)
printf("\n");
m = 2 * n - 1;//哈夫曼所有的結點個數
*ht = (hafftree)malloc(maxsize * sizeof(htnode));
if (!(*ht))
return 0;
(*ht)[0].weight = n;//利用0號單元儲存葉子個數
for (int i = 1; i <= m; i++)
for (int i = n + 1; i <= m; i++)
return ok;
}status select_ht(hafftree ht, int end, int* order_1, int* order_2)
if (count > 2)
break;
} if (ht[m].weight > ht[n].weight)
i = (m > n ? m : n) + 1;
//i=3
while (i <= end)//繼續遍歷尋找更小的更靠前的結點
資料結構之哈夫曼樹
現在,我們經常會使用壓縮和解壓縮軟體來處理文件,因為它除了可以減少文件在磁碟上的空間外,還有重要的一點,就是我們可以在網路上一壓縮的形式傳輸大量資料,是的儲存和傳遞都更加高效。那麼壓縮而不出錯是如何做到的呢?簡單說,就是把我們要壓縮的文字進行重新編碼,今天我們就介紹一種最基本的壓縮編碼方法 哈夫曼編...
資料結構 哈夫曼樹 哈夫曼編碼
哈夫曼樹又稱最優樹 二叉樹 是一類帶權路徑最短的樹。構造這種樹的演算法最早是由哈夫曼 huffman 1952年提出,這種樹在資訊檢索中很有用。結點之間的路徑長度 從乙個結點到另乙個結點之間的分支數目。樹的路徑長度 從樹的根到樹中每乙個結點的路徑長度之和。結點的帶權路徑長度 從該結點到樹根之間的路徑...
哈夫曼編碼 哈夫曼樹 (資料結構)
哈夫曼編碼,又稱霍夫曼編碼,是一種編碼方式,哈夫曼編碼是可變字長編碼 vlc 的一種。huffman於1952年提出一種編碼方法,該方法完全依據字元出現概率來構造異字頭的平均長度最短的碼字,有時稱之為最佳編碼,一般就叫做huffman編碼 有時也稱為霍夫曼編碼 include include inc...