6 6 2 赫夫曼編碼

2021-10-14 10:15:19 字數 2597 閱讀 5749

typedef

struct

htnode,

*huffmancode;

typedef

char

**huffmancode;

// 求報文赫夫曼編碼的演算法

void

huffmancoding

(huffmantree &ht, huffmancode &hc,

int*w,

int n)

m =2* n -1;

// 0號單元棄用

ht =

(huffmantree)

malloc

((m +1)

*sizeof

(htnode));

// ht 的 1到n個位置 用來存放(葉子)結點,初始化它們的權重

for(p - ht, i =1;

i <= n;

i++, p++

, w++);

}// ht 剩下來的結點用來存放遍歷過程中產生的分支結點

for(

; i <= m; i++

, p++);

}// 建立赫夫曼樹

for(i=n+

1; i<=m; i++

)// hc 是乙個字串陣列,用於存放n個葉子結點編碼串的n個起始位址

hc =

(huffmancode)

malloc

((n+1)

*sizeof

(char*)

);// 分配求編碼的工作空間

cd =

(char*)

malloc

(n *

sizeof

(char))

;// 表示'\0' ,編碼結束符

cd[n-1]

=0;// 逐個字元求赫夫曼編碼,

// 從葉子結點開始逆向求赫夫曼編碼

for(i=

1; i<=n; i++

)else

// 根據編碼位數分配空間儲存赫夫曼編碼

hc[i]=(

char*)

malloc

((n-start)

*sizeof

(char))

;// 從工作區間 複製到 編碼陣列裡面

strcpy

(hc[i]

,&cd[start]);

}}}

typedef

struct

htnode,

*huffmancode;

typedef

char

**huffmancode;

void

huffmancoding

(huffmantree &ht, huffmancode &hc,

int*w,

int n)

htnode,

*huffmancode;

typedef

char

**huffmancode;

void

huffmancoding

(huffmantree &ht, huffmancode &hc,

int*w,

int n)

// n個葉子結點 和 n-1個度為2的結點

m =2* n -1;

// 0號單元棄用,下面從1號單元開始存放

ht =

(huffmantree)

malloc

((m +1)

*sizeof

(htnode));

for(p = ht+

1, i =1;

i <= n;

i++, p++

, w++);

}// 剩下的n-1個空位存放遍歷過程中產生的分支結點,到最終的根結點

for(

; i <= m; i++

, p++);

}// 從n+1號位置開始,依次放入遍歷過程產生的分支結點

// m號位置也就是第m+1個單元存放根結點

for(i=n+

1; i<=m; i++

)// hc 存放 n個葉子結點編碼串的n個起始位址

// 第 n+1 個存放'\0',表示編碼結束符

hc =

(huffmancode)

malloc

((n+1)

*sizeof

(char*)

);p = m;

cdlen =0;

// 清空上面產生的m個結點的weight域

// 結點的weight域將作為遍歷時結點的狀態標誌

for(i=

1; i<=m; i++

)// 從根結點到葉子結點

// 開始遍歷,產生編碼

while

(p)else

if(ht[p]

.rchild ==0)

}// 為1 表示已訪問完左子樹,此時該訪問右子樹

else

if(ht[p]

.weight ==1)

}else

}}

赫夫曼編碼

include include using namespace std typedef struct htnode,huffmantree 動態分配陣列儲存赫夫曼樹 typedef char huffmancode 動態分配陣列儲存赫夫曼編碼 赫夫曼編碼的演算法實現 void sethuffmant...

赫夫曼編碼

用赫夫曼樹進行編碼是我們處理資料壓縮常用的方法。請同學們用赫夫曼編碼方法儲存你班同學 資料結構 課程的期終考試成績。include include include include define ok 1 define maxnn 100000 typedef struct studentstuden...

赫夫曼編碼

問題r 赫夫曼編碼 思路 對於赫夫曼來說,往左走為0,往右走為1,可以發現每一位就往下走一層。因此整體報文的長度可以用不同報文在樹中的位置來確定,也就是說,符號種類 每個符號在樹中的深度即為整體報文的長度 而ascll碼的位元位長度為符號個數 8 include include include us...