哈夫曼編碼實現 C

2021-07-12 03:57:14 字數 1226 閱讀 8076

很早之前寫的**,今天翻出了整理了半天才找著個行的通的版本,發帖當作筆記了。

備註:只能完成26個小寫字母的編碼,並分別輸出;在選取weight值最小的兩個結點方法中還可引入演算法優化;記憶體控制有待加強。

本**中大量採用指標操作,

2,選取各個子樹中最小weight值得兩棵子樹,假設指標陣列下標分別為max_index,min_index。並以他們的weigh之和(即頻數之和)構造mhtree中新的內結點,具體data以及capacity的設定是為了便於後續輸出相應字元的哈夫曼編碼;

3,使max_index對應的指標指向新生成的內結點,min_index.....指向null;

4,迴圈1.2.3。最終得到mhtree的根節點;

5,按照一定規則遍歷,則可輸出各個字元對應的哈夫曼編碼。

驗證過10組資料,通過。

原始碼如下:

#include#include#includeusing namespace std;

#define maxsize 26

typedef struct node

mhnode,*mhtree;

void findtwominnode(mhtree arr, int& max_index, int& min_index,int& len)

if(max_index != temp)

min_index = temp;

else

cur = temp + 1;

while(cur < len) }

void insertmhnode(mhtree& root, mhtree arr, int len)

root = head;

}void preorder(mhtree root)

preorder(root->lchild);

cout}void printmhcode(const mhtree root)

if(head->data == '#' && head->rchild->capcity != 0)

}--head->capcity;

cout<<" "str;

for(int i = 0; str[i] != '\0'; ++i)

int len = 0;

for(int j = 0; j < 26; ++j) }

if(len == 1)

cout<<"code of manhadun is: "<<0<<" or "<<1<

C 實現哈夫曼編碼

include include include include using namespace std int max 300 class tree tree char a,int n,tree p1,tree p2 vector open 程式設計客棧 中序遍歷輸出各節點及其哈夫曼編碼 void ...

哈夫曼樹與哈夫曼編碼(C 實現)

1 對給定的n個權值構成n棵二叉樹的初始集合f 其中每棵二叉樹ti中只有乙個權值為wi的根結點,它的左右子樹均為空。2 在f中選取兩棵根結點權值最小的樹作為新構造的二叉樹的左右子樹,新二叉樹的根結點的權值為其左右子樹的根結點的權值之和。3 從f中刪除這兩棵樹,並把這棵新的二叉樹同樣以公升序排列加入到...

哈夫曼編碼實現

define huffmancode char typedef struct node huffmantree struct node 葉節點為n的哈夫曼樹有2 n 1個節點 用 1表示當前parent未被訪問 huffmantree createhuffmantree int wet,int n ...