#include
<
iostream
>
#define
maxvalue 100000
using
namespace
std;
const
intn=4
;//葉子節點個數
//構造哈夫曼樹結點
typedef
struct
hnodetype;
hnodetype hfmtree[2*
n-1];
//結點數
//構造哈夫曼編碼陣列
typedef
struct
hcodetype;
hcodetype hfmcode[n];
//建立哈夫曼樹
void
createhfmtree(hnodetype hfmtree,
intn)
cout
<<
"請輸入結點權值:
"<<
endl;
for(i=0
;i<
n;i++
)for(i=
0;i1;i++)
else
if(hfmtree[j].parent
==-1
&&hfmtree[j].weight
<
x2)}
hfmtree[m1].parent=n
+i;hfmtree[m2].parent=n
+i;hfmtree[n
+i].weight
=hfmtree[m1].weight
+hfmtree[m2].weight;
hfmtree[n
+i].lchild
=m1;
hfmtree[n
+i].rchild
=m2;}}
//轉化編碼
void
createhfmcode(hnodetype hfmtree,hcodetype hfmcode)
for(j
=cd.start+1
;j<
n;j++
)hfmcode[i].bit[j]
=cd.bit[j];
hfmcode[i].start
=cd.start+1
;}}//
主函式
intmain()
cout
<<
endl;
}return0;
}
這個是雛形,下面我們要實現的功能是,輸入乙個含有n位a,b,c,d四種字母的字串。
然後轉換成只含有0,1的**串。之所以要使用哈夫曼樹是因為哈夫曼樹是最優樹。根據權值來實現最短編碼。
下面是實現自動轉碼的程式:
#include
<
iostream
>
#define
maxvalue 100000
using
namespace
std;
const
intn=4
;//葉子節點個數
string
l;int
size;
//構造哈夫曼樹結點
typedef
struct
hnodetype;
hnodetype hfmtree[2*
n-1];
//結點數
//構造哈夫曼編碼陣列
typedef
struct
hcodetype;
hcodetype hfmcode[n];
//建立哈夫曼樹
void
createhfmtree(hnodetype hfmtree,
intn)
cout
<<
"*******************哈夫曼樹字串最優轉碼程式***********************
"<<
endl;
cout
<<
"請輸入乙個字串:(只含有a,b,c,d四種字元,輸入回車結束)
"<<
endl;
cin>>
l;std::
string
str(l);
size
=str.size();
for(
inti=0
;i<
size;
++i)
}for(i=
0;i1;i++)
else
if(hfmtree[j].parent
==-1
&&hfmtree[j].weight
<
x2)}
hfmtree[m1].parent=n
+i;hfmtree[m2].parent=n
+i;hfmtree[n
+i].weight
=hfmtree[m1].weight
+hfmtree[m2].weight;
hfmtree[n
+i].lchild
=m1;
hfmtree[n
+i].rchild
=m2;}}
//轉化編碼
void
createhfmcode(hnodetype hfmtree,hcodetype hfmcode)
for(j
=cd.start+1
;j<
n;j++
)hfmcode[i].bit[j]
=cd.bit[j];
hfmcode[i].start
=cd.start+1
;}}//
主函式
intmain()k++
;cout
<<
endl;
}cout
<<
"轉碼後的字串為:
"<<
endl;
std::
string
str(l);
size
=str.size();
for(
inti=0
;i<
size;
++i)
else
if(str.at(i)=='
b')else
if(str.at(i)=='
c')else
if(str.at(i)=='
d')else
}return0;
}
程式本機測試通過,可以放心執行!
資料結構與演算法 哈夫曼樹(原始碼)!
原文出處 這些天明白了乙個道理,搞技術也是需要激情的。也不知道為什麼這段過的感覺特別的不爽,也不知道是因為快要考試了,心裡沒底,而帶來的恐懼,還是 搞技術太久,心裡想放個假,總之是過的暈暈乎乎,做事情也總是反應遲鈍,思維也不快,我爸媽說我是因為睡 不夠,但是我覺得我一晚上睡6個半小時,也不算短了。真...
資料結構 哈夫曼樹與哈夫曼編碼
1 路徑 由乙個結點到另乙個結點之間的所有分支共同構成。2 路徑長度 結點之間的分支數目。3 樹的路徑長度 從樹的根結點到其他所有結點的路徑長度之和。4 權 賦予某一實體的值。在資料結構中,實體包括結點和邊,所以對應有結點權和邊權。5 結點的帶權路徑長度 結點與樹的根結點之間的路徑長度與結點權的乘積...
資料結構 哈夫曼樹與哈夫曼編碼
include pch.h include 哈夫曼樹類huffmantree的定義 huffman樹結點類treenode宣告 template class t class huffmannode 建構函式 huffmannode getleft void const void setleft hu...