哈夫曼編碼和解碼的實現
#include
#include
#include
#include
using
namespace std;
/*哈夫曼樹的應用----哈夫曼編碼*/
//哈夫曼樹的結點結構
typedef
struct huffmantreehtnode,
*htree;
typedef
char
** huffmancode;
//二級指標,存放指標
const
int leafnum=8;
//葉子結點個數
void
huffmancoding
(htree& ht,
int*w,
int n)
;//構造哈夫曼樹的過程
void
select
(htree ht,
int t,
int&s1,
int&s2)
;//選擇f中權值最小的兩個結點
void
huffmancoded
(htree& ht,huffmancode& hc,
int n,
char
* p)
;//求解哈夫曼編碼
void
translate
(htree& ht,
int a,
int* b,
int bilen,
char
* p); //解碼
void
huffmancoding
(htree& ht,
int*w,
int n)
;//初始化葉子結點完成
}for
(;i++i,
++p)
;//除葉子結點外的結點初始化完成
} cout<<
"初始化後:"
<
cout<<
"雙親"
<<
'\t'
<<
"左孩子"
<<
'\t'
<<
"右孩子"
<<
'\t'
<<
"權值"
<
for(
int i=
0;i)for
(i=n;i
++i)
cout<<
'\n'
<<
"完成後:"
<
cout<<
"雙親"
<<
'\t'
<<
"左孩子"
<<
'\t'
<<
"右孩子"
<<
'\t'
<<
"權值"
<
for(
int i=
0;i) cout<
}void
huffmancoded
(htree& ht,huffmancode& hc,
int n,
char
* p)
hc[i]=(
char*)
malloc
(sizeof
(char))
;//hc[i]即為指標
strcpy
(hc[i]
,&cd[start]);
} cout<<
"哈夫曼編碼為:"
<
for(
int i=
0;i<
8;i++
) cout<
for(
int i=
0;i) cout<
}void
translate
(htree& ht,
int a,
int* b,
int bilen,
char
* p)
cout<<
'\n'
; cout<<
'\n'
<<
"對二進位制編碼解碼後,其內容為:"
<
for(;;
)else
if(b[i]==1
&&ht[n]
.rchild!=-1
)else}}
}void
select
(htree ht,
int t,
int&s1,
int&s2)
else}}
if(s1>s2)
//s1放較小的序號
}int
main()
;//葉子結點權值
char p[leafnum]=;
//葉子結點對應的字元
int bimessage=
;//傳遞的二進位制資訊
int bilen=
sizeof
(bimessage)
/sizeof
(int);
htree ht;
huffmancode hc;
huffmancoding
(ht,w,leafnum)
;huffmancoded
(ht,hc,leafnum,p)
;translate
(ht,leafnum,bimessage,bilen,p)
;return0;
}
執行結果:
哈夫曼編碼和解碼
試題描述 輸入為 一段英文或中文的文章 原文 對輸入的文章構造哈夫曼樹,生成對應的編碼,輸出為 原文所對應的編碼 譯文 根據已經生成的編碼表,輸入任意的譯文可以得到對應的原文。要求有執行結果截圖。include using namespace std typedef struct point huf...
哈夫曼編碼解碼
簡單實現編碼解碼功能 列印哈夫曼樹形 該怎麼做呢 求教!實現初始化,建立huffman樹,並完成字元的編碼 之前解碼用for迴圈不能夠重新復位遍歷 while更好用 include stdio.h include string.h define n 10 待編碼字元的個數,即樹中葉結點的最大個數 d...
哈夫曼編碼與解碼
include include include include define maxnum 60typedef struct huffnode typedef struct huffcode huffnode ht maxnum 2 存放哈夫曼樹 huffcode hcd maxnum 存放ht陣列...