资源简介

功能:1、初始化:能够对输入的任意长度的字符串s进行统计,统计每个字符的频度并建立赫夫曼树 2、建立编码表:利用已经建好的赫夫曼树进行编码,并将每个字符的编码输出。 3、编码:根据编码表对输入的字符串进行编码,并将编码后的字符串输出。 4、译码:利用已经建好的赫夫曼树对编码后的字符串进行译码,并输出译码结果。

资源截图

代码片段和文件信息

// HuffmanTree.cpp: 
#include “HuffmanTree.h“
#include“iostream.h“
/*
 * 前置条件:哈弗曼树不存在
 * 输    入:无
 * 功    能:初始化哈弗曼树
 * 输    出:无
 * 后置条件:创建一个空哈弗曼树
 */

HuffmanTree::HuffmanTree()
{
    for(int i=0;i {
    w[i].weight=0;
w[i].a=NULL;
s[i]=NULL;
}
for( i=0;i {
code[i]=-1;
}
Count();
i=0;
while((w[i].a!=NULL))
{
    i++;     
}
m=i;
InitHuffmanTree();
}
/*
 * 前置条件:哈弗曼树已存在
 * 输    入:无
 * 功    能:销毁哈弗曼树
 * 输    出:无
 * 后置条件:释放哈弗曼树所占用的存储空间
 */

HuffmanTree::~HuffmanTree()
{

}

/*
 * 前置条件:存在一个空哈弗曼树
 * 输    入:字符串数组
 * 功    能:初始化哈弗曼树
 * 输    出:无
 * 后置条件:哈弗曼树被初始化
 */
void HuffmanTree::InitHuffmanTree()
{
       for (int i=0; i<2*m-1; i++)             //初始化
   {
          huffmantree [i].parent= -1;
          huffmantree [i].lchild= -1;
          huffmantree [i].rchild= -1;
  huffmantree[i].data.weight=100;
   }
   for (i=0; i    {
          huffmantree[i].data.weight=w[i].weight;
  huffmantree[i].data.a=w[i].a;
   }
       for (int k=m; k<2*m-1; k++)            //n-1次合并
   {      
           SelectCombine(km);    //在哈弗曼树中找权值最小的两个结点并合并          
   }
}


void HuffmanTree::ReInit()
{

    for(int i=0;i {
    w[i].weight=0;
w[i].a=NULL;
s[i]=NULL;
}
for( i=0;i {
code[i]=-1;
}
Count();
i=0;
while((w[i].a!=NULL))
{
    i++;     
}
m=i;
InitHuffmanTree();
}
/*
 * 前置条件:存在一个非空哈弗曼树
 * 输    入:无
 * 功    能:建立编码表利用已经建好的赫夫曼树进行编码,并将每个字符的编码输出
 * 输    出:每个字符的编码
 * 后置条件:编码表完成
 */
void HuffmanTree::CreateTableHuffmanTree()  
{
     Code cd;
 int cpj;
 for(int i=0;i  { 
 cd.start=m-1;
         c=i;
         p=huffmantree[c].parent;
         while(p!=-1)
 { 
 if(huffmantree[p].lchild==c)
                 cd.code[cd.start]=0;
             else
                 cd.code[cd.start]=1;
             cd.start--;
             c=p;
             p=huffmantree[c].parent;
 }
         for(j=cd.start+1;j             Huffcode[i].code[j]=cd.code[j];
         Huffcode[i].start=cd.start;
 }
 cout<<“编码成功!“<  cout<<“编码结果如下:“<     for(i=0;i  { 
         cout<         for(j=Huffcode[i].start+1;j         cout<  }
}





 /*
 * 前置条件:编码表完成
 * 输    入:无
 * 功    能:编码,根据编码表对输入的字符串进行编码,并将编码后的字符串输出
 * 输    出:编码后的字符串
 * 后置条件:编码完成
 */   
 void HuffmanTree::Encoding()               
 {
     
 cout<<“对输入字符串的编码如下:“<  int k=0ij=0p;
 while(s[k]!=NULL)
 {
    for(i=0;i {
    if(huffmantree[i].data.a==s[k])  
{
for(p=Huffcode[i].start+1;p {
    cout< code[j++]=Huffcode[i].code[p];
}
}
}
k++;
 }
 cout< }
/*
 * 前置条件:编码完成
 * 输    入:无
 * 功    能:译码,利用已经建好的赫夫曼树对编码后的字

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

    .CA....    196724  2003-02-27 02:26  08212291_王碧珺_实验三_哈夫曼树\Debug\experiment03_2.exe

    .CA....    317728  2003-02-27 02:26  08212291_王碧珺_实验三_哈夫曼树\Debug\experiment03_2.ilk

    .CA....     43520  2009-11-22 18:13  08212291_王碧珺_实验三_哈夫曼树\Debug\experiment03_2.opt

    .CA....    248812  2003-02-27 02:24  08212291_王碧珺_实验三_哈夫曼树\Debug\experiment03_2.pch

    .CA....    533504  2003-02-27 02:24  08212291_王碧珺_实验三_哈夫曼树\Debug\experiment03_2.pdb

    .CA....     20040  2003-02-27 02:24  08212291_王碧珺_实验三_哈夫曼树\Debug\HuffmanTree.obj

    .CA....      7645  2003-02-27 02:26  08212291_王碧珺_实验三_哈夫曼树\Debug\main.obj

    .CA....     58368  2003-02-27 02:26  08212291_王碧珺_实验三_哈夫曼树\Debug\vc60.idb

    .CA....     69632  2003-02-27 02:24  08212291_王碧珺_实验三_哈夫曼树\Debug\vc60.pdb

    .CA....      4498  2009-11-22 01:10  08212291_王碧珺_实验三_哈夫曼树\experiment03_2.dsp

    .CA....       536  2009-11-20 21:52  08212291_王碧珺_实验三_哈夫曼树\experiment03_2.dsw

    .CA....     50176  2003-02-27 02:38  08212291_王碧珺_实验三_哈夫曼树\experiment03_2.ncb

    .CA....     53760  2003-02-27 02:38  08212291_王碧珺_实验三_哈夫曼树\experiment03_2.opt

    .CA....       944  2003-02-27 02:26  08212291_王碧珺_实验三_哈夫曼树\experiment03_2.plg

    .CA....      6778  2003-02-27 02:24  08212291_王碧珺_实验三_哈夫曼树\HuffmanTree.cpp

    .CA....      1724  2003-02-27 02:24  08212291_王碧珺_实验三_哈夫曼树\HuffmanTree.h

    .CA....      1132  2003-02-27 02:16  08212291_王碧珺_实验三_哈夫曼树\main.cpp

    .C.D...         0  2003-02-27 00:09  08212291_王碧珺_实验三_哈夫曼树\Debug

    .C.D...         0  2003-02-27 00:09  08212291_王碧珺_实验三_哈夫曼树

----------- ---------  ---------- -----  ----

              1615521                    19


评论

共有 条评论