本**流程:
隨機輸入一段字串--->根據輸入字串得到每個字元權重(頻數)並輸出--->得到每個字元對應哈夫曼編碼並輸出--->輸入一段哈夫曼編碼--->利用每個字元對應的哈夫曼編碼來解碼
技術支援:
這裡是**:
main.cpp
1 #include 2 #include "哈夫曼樹.h(其實decode解碼函式可以用void型別的,但是我懶得改了)哈夫曼樹.h
"3 #include 4 #include
5 #include
6using
namespace
std;
7int
main()
21for (auto &i : m)
2226 wei = (int *)malloc((n + 1) * sizeof(int
));27 ch = (char*)malloc((n + 1) * sizeof(char
));28
for (auto &i : m)
2934 createhuffmantree(&ht, n, wei, ch);
35 createhuffmancode(&ht, &hc, n);
36return0;
37 }
1 #include 2哈夫曼樹.cppusing
namespace
std;
3 typedef struct
node, *huffmantree;
8 typedef char *huffmancode;
9void
select(huffmantree *huffmantree, int n, int *s1, int *s2);
10void createhuffmantree(huffmantree *huffmantree, int n, int w, char
cha);
11void createhuffmancode(huffmantree *huffmantree, huffmancode *huffmancode, int
n);12
string decode(huffmantree *huffmantree, huffmancode *huffmancode, int n, string s);
1 #include 2 #include "除錯結果如下:哈夫曼樹.h
"3 #include
4using
namespace
std;5//
找權值最小的結點
6void
select(huffmantree *huffmantree,int n,int *s1,int *s2)
19else
if (min2 > (*huffmantree)[i].weight) 23}
24}25 *s1 =m1;
26 *s2 =m2;27}
28//
初始化節點,構造哈夫曼樹
29void createhuffmantree(huffmantree *huffmantree,int n,int w,char
cha)
41//
非葉子節點的初始化
42for (i = n + 1; i <= m; i++)
48//
開始構建哈夫曼樹
49 cout << "
哈夫曼樹:
"<
50 cout << "
父節點權值 (左孩子權值 右孩子權值)
"<
51int s1, s2;//
這是兩個權值最小的結點所在位置
52for (i = n + 1; i <= m; i++) 62}
63//
初始化哈夫曼編碼?!生成哈夫曼編碼
64void createhuffmancode(huffmantree *huffmantree,huffmancode *huffmancode,int
n) 77
//為第i個字元編碼分配空間
78 huffmancode[i] = (char*)malloc((n - start) * sizeof(char
));79 strcpy(huffmancode[i], &cd[start]);80}
81free(cd);
82//
開始列印編碼
83 cout << "
哈夫曼字元 權值 對應編碼
"<
84for (i = 1; i <= n; i++)
87//
在這裡解碼,一定要成功!!!
88string
s;89 cout << "
請輸入待解碼的哈夫曼編碼:";
90 cin >>s;
91decode(huffmantree, huffmancode, n, s);92}
9394
string decode(huffmantree *huffmantree,huffmancode *huffmancode,int n,string
s) 101 c = (char*)malloc(s.size() * sizeof(char));//
c的記憶體空間
102for (i = 0; i < s.size(); i++)
112else
if ((i == s.size() - 1) && j == n && c[0] != '
\0') cout << "
error!!!
"<
113}
114 k++;
115}
116return0;
117 }
真的真的是經歷了九九八十一難才完成!!!
哈夫曼編碼解碼
簡單實現編碼解碼功能 列印哈夫曼樹形 該怎麼做呢 求教!實現初始化,建立huffman樹,並完成字元的編碼 之前解碼用for迴圈不能夠重新復位遍歷 while更好用 include stdio.h include string.h define n 10 待編碼字元的個數,即樹中葉結點的最大個數 d...
構建哈夫曼樹,並輸出哈夫曼編碼
輸入條件 輸入從小到大排列的n個正整數,作為葉子的權值,共同完成構建具有n片葉的,根指標為hroot的哈夫曼樹 1 程式前部的定義 include include include define max 999 監督元 define n 6 n個葉子節點 char s 6 存放哈夫曼編碼的陣列,初始化...
哈夫曼編碼 哈夫曼樹
1.定義 哈夫曼編碼主要用於資料壓縮。哈夫曼編碼是一種可變長編碼。該編碼將出現頻率高的字元,使用短編碼 將出現頻率低的字元,使用長編碼。變長編碼的主要問題是,必須實現非字首編碼,即在乙個字符集中,任何乙個字元的編碼都不是另乙個字元編碼的字首。如 0 10就是非字首編碼,而0 01不是非字首編碼。2....