哈夫曼編碼c qt實現

2021-08-15 11:31:12 字數 3456 閱讀 9538

--------

main.cpp

--------

#include

#include

"huffman.h"

#include

#include

#include

using

namespace

std;

//

統計字元出現的頻率

int

countnum(const

char

&ch,

char

*arr)

return

ret;

}
int

main(int

argc,

char

*argv)

huffman.createhuffmantree();

//構造一棵哈夫曼樹

huffman.printhuffmanrule();

//輸出所有字元的編碼規則

huffman.encode(inputarr);

//編碼

qstring

strafterdecode

=huffman.decode();

//解碼

qdebug()

<<

strafterdecode;

//輸出字元與輸入字元對比

return

a.exec();

}

---------

huffman.h

---------

#ifndef

huffman_h

#define

huffman_h

#include

#include

#include

struct

huffmannode

;
class

huffman

;
#endif

//huffman_h

------------

huffman.cpp

------------

#include

"huffman.h"

#include

bool

comparecallback(huffmannode

*n1,

huffmannode

*n2)

huffman::huffman()
void

huffman::createnode(char

ch,int

count)

}

if(!isareadycontain)

}
void

huffman::createhuffmantree()

//產生乙個新子樹

_root

=new

huffmannode;

_root->ch

='\0';

_root->count

=lchild->count

+rchild->count;

_root->lchild

=lchild;

_root->rchild

=rchild;

//新子樹的根節點為下一次比較的左節點

lchild

=_root;

}

createcodemap();

}
void

huffman::printhuffmanrule()

}
void

huffman::encode(char

*str)

qdebug()

<<

_encodestr;

}
qstring

huffman::decode()

else

if(_codemap.key(value))

}

return

str;

}
void

huffman::createcodemap()

void

huffman::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....