資源簡介
用C++實現的哈夫曼編譯碼器,可以實現創建哈夫曼樹、對txt文件進行編碼、譯碼,也可以查看生成的哈夫曼樹。數據結構作業參考之必備品。

代碼片段和文件信息
#include
#include
#include
#include//包含系統函數
#include//含有getch()
using?namespace?std;
class?Hufmantree
{
private:
int?weight;
int?parent;
int?lchild;
int?rchild;
char?letter;
public:
Hufmantree();
Hufmantree(int?wint?pint?lint?rchar?le):weight(w)parent(p)lchild(l)rchild(r)letter(le){};
Hufmantree*?InitTree(char*lint*?wint?n);
char**?CodeList(Hufmantree?*Htint?n);
int?gweight();
int?gparent();
int?glchild();
int?grchild();
char?gletter();
void?cweight(int);
????void?cparent(int);
????void?clchild(int);
????void?crchild(int);
void?cletter(char);
void?Select(Hufmantree?*Htint?nint?&s1int?&s2);
void?Prin(Hufmantree?*Ht);
void?Outchart(char**Hcint?n);
void?SaveTree(Hufmantree*Ht);
void?SaveList(char**Hcint);
void?encode(Hufmantree?*Htchar**Hc);?//編碼
void?decode(Hufmantree?*Ht);//譯碼
void?findchar(Hufmantree?*Htchar?*pintint?&jint?&length);//譯碼尋找函數
Hufmantree*?GetTree();//從磁盤文件讀樹的信息
void?treeprint(Hufmantree*Htint?iint?j);
????void?Tprint(Hufmantree*Ht);
????
Hufmantree*?Creattree();
void?Menu();
};
int?main()
{???
/********************測試**********************/
Hufmantree?t;
t.Menu();
// Hufmantree?*Ht;
// char?**Hc;
/* Ht=t.InitTree(ab7);
Ht=t.GetTree();
t.Prin(Ht);
????t.encode(HtHc);
????t.Tprint(Ht);
Ht=t.Creattree();
Hc=t.CodeList(Ht27);
t.Outchart(Hc27);
t.SaveList(Hc27);
t.encode(HtHc);
t.decode(Ht);
*/
return?0;
}
/***********************構造函數和基本初等函數****************/
Hufmantree::Hufmantree()
{???
letter=0;
weight=0;
parent=0;
lchild=0;
rchild=0;
}
/***********************獲得相關的值**********************/
int?Hufmantree::gweight(){return?weight;}
int?Hufmantree::gparent(){return?parent;}
int?Hufmantree::glchild(){return?lchild;}
int?Hufmantree::grchild(){return?rchild;}
char?Hufmantree::gletter(){return?letter;}
/**********************改變相關的值*********************/
void?Hufmantree::cweight(int?w){weight=w;}
void?Hufmantree::cparent(int?p){parent=p;}
void?Hufmantree::clchild(int?l){lchild=l;}
void?Hufmantree::crchild(int?r){rchild=r;}
void?Hufmantree::cletter(char?le){letter=le;}
/***************************************初始化樹相關的***************/
void?Hufmantree::Select(Hufmantree?*Htint?nint?&s1int?&s2)??//選擇兩個最小值
{
???
???int?i;
?
???for(i=1;i<=n;i++)
???{???
???
???if(Ht[i].gparent()==0)
???{?
???s1=i;?
???}
???}
???for(i=1;i<=n;i++)
???{
???if(Ht[i].parent==0)
???{
???if(Ht[i].gweight()<=Ht[s1].gweight())
???{s1=i;}
???}
???}
for(i=1;i<=n;i++)
{
???if((Ht[i].parent==0)&&(i!=s1))
???{????
???s2=i;
???????}
??
????}
???????
for(i=1;i<=n;i++)
???{
???if((Ht[i].parent==0)&&(i!=s1))
???{??
???
???if(Ht[i].weight<=Ht[s2].weight)
???{??
??????
???s2=i;
???}
???}
???}
???
}
/***************************建立樹******
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????目錄???????????0??2012-10-03?09:34??huffmanOK\
?????文件?????????165??2012-10-03?09:33??huffmanOK\codefile.txt
?????目錄???????????0??2013-08-21?22:07??huffmanOK\Debug\
?????文件?????????708??2012-10-03?09:33??huffmanOK\Debug\cl.command.1.tlog
?????文件???????10074??2012-10-03?09:33??huffmanOK\Debug\CL.read.1.tlog
?????文件?????????366??2012-10-03?09:33??huffmanOK\Debug\CL.write.1.tlog
?????文件?????????320??2015-12-03?09:31??huffmanOK\Debug\codefile.txt
?????文件??????614781??2012-10-03?09:33??huffmanOK\Debug\edit.obj
?????文件?????????739??2012-10-01?14:19??huffmanOK\Debug\hfmtree.txt
?????文件??????697344??2012-10-03?09:33??huffmanOK\Debug\huffman.exe
?????文件?????????406??2012-10-03?09:33??huffmanOK\Debug\huffman.exe.em
?????文件?????????472??2012-10-03?09:33??huffmanOK\Debug\huffman.exe.em
?????文件?????????381??2012-10-03?09:33??huffmanOK\Debug\huffman.exe.intermediate.manifest
?????文件?????1807700??2012-10-03?09:33??huffmanOK\Debug\huffman.ilk
?????文件??????????73??2012-10-03?09:33??huffmanOK\Debug\huffman.lastbuildstate
?????文件????????3824??2012-10-03?09:33??huffmanOK\Debug\huffman.log
?????文件?????2927616??2012-10-03?09:33??huffmanOK\Debug\huffman.pdb
?????文件?????????210??2012-10-03?09:33??huffmanOK\Debug\huffman_manifest.rc
?????文件???????????2??2012-10-03?09:33??huffmanOK\Debug\li
?????文件???????????2??2012-10-03?09:33??huffmanOK\Debug\li
?????文件????????1456??2012-10-03?09:33??huffmanOK\Debug\li
?????文件????????3274??2012-10-03?09:33??huffmanOK\Debug\li
?????文件?????????858??2012-10-03?09:33??huffmanOK\Debug\li
?????文件?????????209??2012-10-01?14:19??huffmanOK\Debug\list.txt
?????文件?????????402??2012-10-03?09:33??huffmanOK\Debug\mt.command.1.tlog
?????文件?????????442??2012-10-03?09:33??huffmanOK\Debug\mt.read.1.tlog
?????文件?????????338??2012-10-03?09:33??huffmanOK\Debug\mt.write.1.tlog
?????文件?????????560??2012-10-03?09:33??huffmanOK\Debug\rc.command.1.tlog
?????文件?????????414??2012-10-03?09:33??huffmanOK\Debug\rc.read.1.tlog
?????文件?????????318??2012-10-03?09:33??huffmanOK\Debug\rc.write.1.tlog
?????文件??????????88??2015-12-03?09:31??huffmanOK\Debug\textfile.txt
............此處省略26個文件信息
- 上一篇:C語言讀HZK16HZK24HZK32 顯示
- 下一篇:c++數據結構 算法模板
評論
共有 條評論