?? huffman.h
字號:
//*******************************huffman.h**********************//*****************葉子結點為n的哈夫曼樹共有2n-1個結點**********#ifndef HUFFMAN_H#define HUFFMAN_Hclass HuffmanNode {public: char info; //結點信息 double weight; //結點權值 int parent, lchild, rchild; //父親結點,左右孩子結點 HuffmanNode() { parent=lchild=rchild=-1; } HuffmanNode(const char &data, const double &wt, const int &pa=-1, const int &lch=-1, const int &rch=-1) { info=data; weight=wt; parent=pa; lchild=lch; rchild=rch; }}; //class HuffmanNode end class HuffmanTree {public: HuffmanTree(const int &s=100) { maxSize=(s>100?s:100); arrayTree=new HuffmanNode[maxSize]; currentSize=0; codeArray=0; } ~HuffmanTree() { delete[] arrayTree; if (codeArray!=0) delete[] codeArray; } 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 { //HuffmanTree的私有類,編碼類 public: Code():length(10) { ptr=new char[length]; } ~Code() { delete[] ptr; } char *ptr; const int length; }; Code *codeArray; //數組大小為currentSize void reverse(char arr[]);}; //class HuffmanTree end#endif //huffman.h end
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -