• 大小: 6.17MB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2023-10-14
  • 语言: C/C++
  • 标签: 哈夫曼树  

资源简介

用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.embed.manifest
     文件         472  2012-10-03 09:33  huffmanOK\Debug\huffman.exe.embed.manifest.res
     文件         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\link-cvtres.read.1.tlog
     文件           2  2012-10-03 09:33  huffmanOK\Debug\link-cvtres.write.1.tlog
     文件        1456  2012-10-03 09:33  huffmanOK\Debug\link.command.1.tlog
     文件        3274  2012-10-03 09:33  huffmanOK\Debug\link.read.1.tlog
     文件         858  2012-10-03 09:33  huffmanOK\Debug\link.write.1.tlog
     文件         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个文件信息

评论

共有 条评论