Huffman編碼C 實現

2021-06-19 12:27:24 字數 2310 閱讀 5220

//*******************************huffman.h**********************

//*****************葉子結點為n的哈夫曼樹共有2n-1個結點**********

#ifndef huffman_h

#define huffman_h

class huffmannode

huffmannode(const char &data, const double &wt, const int &pa=-1, const int &lch=-1, const int &rch=-1)

}; //class huffmannode end

class huffmantree

~huffmantree()

void run(const char*, const char*, const char*);

private:

huffmannode *arraytree; //哈夫曼結點陣列

int maxsize; //陣列最大值

int currentsize; //當前陣列大小

void insert(const char&, const double&); //插入結點

void createhuffmantree(); //建立哈夫曼樹

void createhuffmancode(); //建立哈夫曼編碼

int findposition(const char &) const; //返回字元在arraytree中的位置

int getlongestcodelength() const; //返回編碼系統中長度最大的編碼的位置

int isequal(const char *s) const; //判斷s是否存在於編碼系統中,若存在則返回s在編碼系統中的位置,否則返回-1

void print(); //列印huffman編碼

private:

class code

~code()

char *ptr;

const int length;

};code *codearray; //陣列大小為currentsize

void reverse(char arr);

}; //class huffmantree end

#endif end

//**************************huffman.cpp**********************

#include

#include //for ofstream ifstream

#include //for numeric_limits::max()

#include //for exit()

#include //for strlen(), strcpy(), strcmp()

#include "huffman.h"

using namespace std;

void huffmantree::insert(const char &data, const double &wt)

void huffmantree::reverse(char arr)

int huffmantree::findposition(const char &ch) const

return len;

}int huffmantree::isequal(const char *s) const

createhuffmantree(); //構造huffman樹

createhuffmancode(); //對統計字元進行編碼

//開啟outfilename提供輸出

ofstream fileout(outfilename, ios::out);

if (!fileout)

filein.close();

fileout.close();

//開啟outfilename, secondoutname,分別提供輸入輸出

filein.open(outfilename, ios::in);

fileout.open(secondoutname, ios::out);

if (!filein || !fileout)

filein.close();

fileout.close();

} end

//*****************************main.cpp*************************

#include "huffman.h"

int main() end

Huffman編碼C實現

huffman編碼 根據huffman樹進行編碼的,用到的資料結構是二叉樹。typedef int elemtype typedef struct binarytree 2 構建最優二叉樹 void createhuffman int leafnum,binarytree huffmantree e...

C 實現Huffman編碼和解碼

using system using system.collections using system.collections.generic using system.linq using system.text namespace stringcompresser public huffman c...

Huffman樹及編碼C 實現

by qianghaohao johar huffman樹採用陣列實現,編碼時從葉子節點開始向上編碼,所以採用deque支援前插的 容器來存放每個葉子的編碼。如下 include include include include include using namespace std typedef ...