//*******************************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...