資料結構 樹 赫夫曼樹及赫夫曼編碼

2021-08-26 06:03:00 字數 839 閱讀 2971

傳說中的最優二叉樹——赫夫曼(huffman)樹

本例採用如下儲存結構:

例項:下面這個是嚴蔚敏《資料結構》c語言版上的赫夫曼編碼儲存結構

我換了一種方式,開了乙個棧然後反覆用,具體見**:

"head.h"

#include#includeusing namespace std; class node ; node::node() class huffman ; huffman::huffman() void huffman::gethuffmancode()//獲得赫夫曼編碼主調函式 void huffman::gethuffmannode()//獲得節點 cin.clear(); len=i; ht=new node[2*i]; for(i=1;i<=len;i++) *(ht+i)=node[i-1]; cur=len+1; } void huffman::huffmancoding()//編碼 } void huffman::printhuffmancode()//輸出編碼 while((ht+j)->parent!=0);//未查找到根節點時進行查詢 while(!s.empty())//輸出編碼 } first=true; (ht+a)->parent=cur;//更改a的父節點 for(int i=1;iparent==0&&(first==true||(ht+i)->weightweight; if(first==true) first=false; } } (ht+b)->parent=cur;//更改b的父節點 if(a>b)//如有必要調整a、b次序 }

"main.cpp"

#include#include"head.h" using namespace std; int main()

赫夫曼樹及赫夫曼編碼

typedef struct htnode,huffmantree typedef char huffmancude status min huffmantree ht,int k 選出最小元素後將該元素的parent值賦1,使得下一次比較將其排除在外 ht min parent 1 剛開始編寫的時...

赫夫曼樹與赫夫曼編碼

問題描述 利用huffman編碼進行通訊可以大大提高通道利用率,縮短資訊傳輸時間,降低傳輸成本。但是,這要求在傳送端通過乙個編碼系統對待傳資料預先編碼,在接受端將傳來的資料編碼進行解碼 復原 對於有些通道,每端都需要乙個完整的編 解碼系統。試為這樣的資訊收發站編寫乙個huffman的編 解碼系統。給...

赫夫曼樹和赫夫曼編碼

赫夫曼樹 1 先把有權值的葉子節點按照從小到大的順序排成乙個有序序列,即 a 5 e 10 b 15 d 30 c 40 2 取前兩個權值最小的結點即a 5 和e 10 作為乙個新的結點n1的兩個子節點,結點權值較小的作為左結點,即a為左結點,e為右結點,n1的權值為兩個結點權值的和,即5 10 1...