文檔庫

最新最全的文檔下載
當前位置:文檔庫 > 數據結構+哈夫曼編碼+實驗報告

數據結構+哈夫曼編碼+實驗報告

實驗報告

一、實驗目的

掌握哈夫曼樹及其應用。

二、實驗內容

利用哈夫曼算法,構造最優二叉樹,然后對構造好的二叉樹的葉子結點進行前綴編碼。

三、實驗步驟

(1)審清題意,分析并理出解決問題的基本思路。(2)根據基本思路,設計好程序的算法。(3)根據算法編寫源程序。(4)在計算機上編譯程序,檢驗程序的可運行性

數據結構設計:

// 赫夫曼樹和赫夫曼編碼的存儲結構

typedef struct // 結點的結構,在教科書第147頁

{ unsigned int weight; // 結點的權值

unsigned int parent,lchild,rchild;

}HTNode,*HuffmanTree; // 動態分配數組存儲赫夫曼樹

typedef char **HuffmanCode; // 動態分配數組存儲赫夫曼編碼表

void HuffmanCoding(HuffmanTree &HT,HuffmanCode &HC,int* w,int n) // 算法6.12

{ // w存放n個字符的權值(均>0),構造赫夫曼樹HT,并求出n個字符的赫夫曼編碼HC int start;

unsigned f;

// 以下是從葉子到根逆向求每個字符的赫夫曼編碼

int m,i,s1,s2;

unsigned c;

HuffmanTree p;

char *cd;

if(n<=1) // 葉子結點數不大于n

return;

m=2*n-1; // n個葉子結點的赫夫曼樹共有m個結點

HT=(HuffmanTree)malloc((m+1)*sizeof(HTNode)); // 0號單元未用

for(p=HT+1,i=1;i<=n;++i,++p,++w) // 從1號單元開始到n號單元,給葉子結點賦值{ // p的初值指向1號單元

(*p).weight=*w; // 賦權值

(*p).parent=0; // 雙親域為空(是根結點)

(*p).lchild=0; // 左右孩子為空(是葉子結點,即單結點樹)

(*p).rchild=0;

步行者vs76人 宁夏11选5开奖结果查询 娱乐城真人龙虎斗 彩票七位数 河南11选5基本走势带坐标 重庆快乐10分线下代理 瑞波币钱包app下载 万国彩票娱乐平台官网 北京单场必发交易 竟彩足球比分直播500w 云南时时彩中三-点击进入 pc蛋蛋500期走势图 河南快赢481走势 皇冠比分即时比分 一木棋牌下载客服 腾讯麻将外挂软件 以太币最新价格