Huffman編碼與解碼C 程式

2021-07-03 14:58:38 字數 2351 閱讀 3201

//*******************************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編碼與解碼

近期學習資料結構碰到huffman編碼與解碼問題,自己動手寫了一些,注釋比較全,ok,下面直接貼 include include define telemtype char define wtype int define leafnumber 5 預設權重集合大小 define totalnumbe...

Huffman編碼與解碼的實現

huffman編碼相信學過資料結構這麼課的都知道,概念也比較好理解,但是一般好理解的演算法,在實際實現的過程中總是會遇到各種問題,一方面個人認為是對演算法的實現過程不熟,另一方面在實際實現的過程中可以提公升自己實現演算法的能力,將自己的想法實現後還是比較滿足的。下面是本人親自實現的huffman編碼...

C 實現Huffman編碼和解碼

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