實現思想:
1.首先分析輸入的報文,得到各個字元出現的次數和概率,將出現次數作為權重構建哈夫曼樹
2.構造huffman樹,並動態顯示huffman樹的生成過程
3,對每個字元進行編碼
4.對字串編譯碼
5,socket程式設計實現通訊(重點學習)
介面:
關鍵**:
1.
enum ;
clistctrl m_plist;
cstring m_mes;
m_plist.insertcolumn( 0, "字元", lvcfmt_left, 40 );//插入列
m_plist.insertcolumn( 1, "次數", lvcfmt_center, 40 );//插入列
m_plist.insertcolumn( 2, "概率", lvcfmt_center, 60 );//插入列
m_plist.insertcolumn( 3, "hfm編碼", lvcfmt_center, 100 );//插入列
int chuffmandlg::probability(cstring str)//統計每個字元出現概率,返回不同字元個數
int strlength=str.getlength();//字串總長
int i=0,j=0;
cstring temp;
while (str!="")
return i;
2.huffman樹和節點的資料結構定義
typedef struct huffmannode
huffmannode(int elem,char ch,huffmannode* left = null, huffmannode* right = null, huffmannode* ptr = null ):weight(elem),character(ch),
leftchild(left), rightchild(right), parent(ptr){}
bool operator <=(huffmannode& r)
bool operator > (huffmannode& r)
huffmannode* saddress;
int visited;//訪問標記,編碼時使用
cstring hfmcode;
}huffmannode;
class huffantree
;
建立huffman樹:
void huffantree::createhfmtree(int n,clistctrl *list)
int leafnum=0;
for(i = 0; i < n-1; i++)
if (second.rightchild==null&&second.leftchild==null)//記錄葉子節點
hp.insert(*parent);
} root = parent;
root->createsort = createsort;//最後建立
}
void huffantree::mergetree(huffmannode &ht1, huffmannode &ht2, huffmannode* & parent)
資料結構 Huffman樹
參照書上寫的huffman樹的 結構用的是線性儲存的結構 不是二叉鍊錶 裡面要用到查詢最小和第二小 理論上錦標賽法比較好 但是實現好麻煩啊 考慮到資料量不是很大 就直接用比較笨的先找最小 去掉最小再找第二小的方法了。include include include typedef struct htn...
資料結構 Huffman樹
參照書上寫的huffman樹的 結構用的是線性儲存的結構 不是二叉鍊錶 裡面要用到查詢最小和第二小 理論上錦標賽法比較好 但是實現好麻煩啊 考慮到資料量不是很大 就直接用比較笨的先找最小 去掉最小再找第二小的方法了。include include include typedef struct htn...
資料結構Huffman編碼解碼
1 需求分析 1.1問題描述 問題描述 利用哈夫曼編碼進行通訊可以大大提高通道利用率,縮短資訊傳輸時間,降低傳輸成本。但是,這要求在傳送端通過乙個編碼系統對待傳資料預先編碼,在接收端將傳來的資料進行解碼 解碼 對於雙工通道 即可以雙向傳輸資訊的通道 每端都需要乙個完整的編 解碼系統。試為這樣的資訊收...