資料結構實驗之 哈夫曼樹的實現

2021-10-25 13:51:28 字數 2679 閱讀 3044

哈夫曼樹的這個實驗我是採用常用的左『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...