--------
main.cpp
--------
#include
#include"huffman.h"
#include
#include
#include
usingnamespace
std;
//統計字元出現的頻率
intcountnum(const
char
&ch,
char
*arr)
return
ret;
}
intmain(int
argc,
char
*argv)
huffman.createhuffmantree();
//構造一棵哈夫曼樹
huffman.printhuffmanrule();
//輸出所有字元的編碼規則
huffman.encode(inputarr);
//編碼
qstring
strafterdecode
=huffman.decode();
//解碼
qdebug()
<<
strafterdecode;
//輸出字元與輸入字元對比
return
a.exec();
}
---------
huffman.h
---------
#ifndefhuffman_h
#definehuffman_h
#include
#include
#include
structhuffmannode
;
classhuffman
;
#endif//huffman_h
------------
huffman.cpp
------------
#include"huffman.h"
#include
boolcomparecallback(huffmannode
*n1,
huffmannode
*n2)
huffman::huffman()
voidhuffman::createnode(char
ch,int
count)
}
if(!isareadycontain)
}
voidhuffman::createhuffmantree()
//產生乙個新子樹
_root
=new
huffmannode;
_root->ch
='\0';
_root->count
=lchild->count
+rchild->count;
_root->lchild
=lchild;
_root->rchild
=rchild;
//新子樹的根節點為下一次比較的左節點
lchild
=_root;
}
createcodemap();
}
voidhuffman::printhuffmanrule()
}
voidhuffman::encode(char
*str)
qdebug()
<<
_encodestr;
}
qstringhuffman::decode()
else
if(_codemap.key(value))
}
return
str;
}
voidhuffman::createcodemap()
voidhuffman::mapinsert(huffmannode
*node,
ushort
code)
if(node->rchild)
if(node->lchild
&&!node->lchild->ch)
if(node->rchild
&&!node->rchild->ch)
}
哈夫曼編碼實現
define huffmancode char typedef struct node huffmantree struct node 葉節點為n的哈夫曼樹有2 n 1個節點 用 1表示當前parent未被訪問 huffmantree createhuffmantree int wet,int n ...
實現哈夫曼編碼
include include include include include using namespace std typedef struct node vector nodes 表示結點的指標組 double char number 0 每個字元平均花費的編碼長度 const int cha...
哈夫曼編碼 哈夫曼樹
1.定義 哈夫曼編碼主要用於資料壓縮。哈夫曼編碼是一種可變長編碼。該編碼將出現頻率高的字元,使用短編碼 將出現頻率低的字元,使用長編碼。變長編碼的主要問題是,必須實現非字首編碼,即在乙個字符集中,任何乙個字元的編碼都不是另乙個字元編碼的字首。如 0 10就是非字首編碼,而0 01不是非字首編碼。2....