構造哈夫曼樹及輸出哈夫曼編碼,優先佇列構造最小堆實現
windows下輸入結束方法:enter,ctrl+z,enter
執行結果如下:
//遍歷哈夫曼樹,列印哈夫曼編碼
void createhuffcode(treenode * root)
//如果是葉子結點,列印
if (!(root->lchild) && !(root->rchild))
if (root->rchild)
}//自定義比較體
struct cmp
};//最小堆
priority_queue < treenode*, vector
, cmp > pque;
void createhufftree()
//標準輸入輸出流讀寫
char ch_temp;
int freq_temp;
while (cin>>ch_temp >> freq_temp)
for (int i = 0; i < vch.size(); i++)
//依次找出權值最小的兩個結點
while (pque.size() != 1)
createhuffcode(pque.top());
}int main()
優先佇列實現 哈夫曼編碼
用到了優先佇列的知識點,還有dfs演算法。優先佇列主要是為了查詢最小權重樹的時候方便查詢,不用耗費很多的時間從已經產生的樹種依次查詢,具體實現看 dfs主要是用來遍歷樹從而拿到每個字元的編碼,具體實現看 include include include includeusing namespace s...
哈夫曼編碼的C 實現(優先佇列 貪心)
哈夫曼編碼就是不斷地取數列中最小的兩個,合併,再新增到數列中,迴圈。利用了貪心的思想。在c 實現的時候可以用到優先佇列 priority queue,這個方便的東西。這個優先佇列,會自己進行排序,每次加進去乙個數,都會更新,降序排列或公升序排列。以公升序排列為例,更新過後的隊首元素就是數列中最小的數...
貪心 哈夫曼編碼 哈夫曼樹
解決問題 哈夫曼樹 眾所周知,計算機以01串來儲存和運算。所以,如果我們想要存乙個字元或漢字,例如a,計算機會將它變為乙個01串,這個串就是a的編碼。如果我們輸入了乙個詞 cat。如果a的編碼是1,c的編碼是10,t的編碼是11,那麼 cat 對應的編碼就是 10111 好了,那麼問題來了 1011...