资源简介

哈夫曼编码(压缩文件),c/c++课程设计,附带程序运行用例以及讲解答辩PPT,程序清晰易懂

资源截图

代码片段和文件信息

#include  
 #include
#define ASCIIL 256  
#define F(x) ((x-1)>>1)   
#define L(x) ((x<<1)+1)  
#define R(x) ((x<<1)+2)  
#define SWAP(abtmp) {tmp=a;a=b;b=tmp;}  
  
using namespace std;  
  
//实现二叉堆模板类,小顶堆  
template   
class CHeap  
{  
    HeapType *datatmp;  
    int size;  
      
    void HeapUp(int ix)  
    {//自底向顶维护堆  
        int f;  
        for(f=F(ix);ix&&data[ix]            SWAP(data[ix]data[f]tmp);  
    }  
      
    void HeapDown(int ix)  
    {//自顶向底维护堆  
        int lrt;  
        HeapType mintmp;  
        if(ix>=size) return ;  
        l=L(ix)r=R(ix);  
          
        min=data[ix]t=ix;  
          
        if(l            t=lmin=data[l];  
        if(r            t=rmin=data[l];  
          
        SWAP(data[ix]data[t]tmp);  
        if(ix!=t) HeapDown(t);  
    }  
      
public:  
    CHeap()  
    {//这里特殊应用,堆内元素个数不超过256  
        size=0;  
        data=new HeapType[256];  
    }  
    ~CHeap()  
    {//释放内存  
        delete [] data;  
  
    }  
    int getsize()  
    {//返回堆大小  
        return size;  
    }  
    void clear()  
    {//清空堆  
        size=0;  
    }  
    void insert(HeapType e)  
    {//向堆尾中插入元素,并向顶维护堆  
        data[size++]=e;  
        HeapUp(size-1);  
    }  
    HeapType top()  
    {//从堆顶取出元素,并向底维护堆  
        HeapType ret=data[0];  
        data[0]=data[--size];  
        HeapDown(0);return ret;  
    }  
};  
  
//哈夫曼树结点结构体实现  
typedef struct talNode{  
      
    unsigned char c;    //叶结点时对应ASCII值  
    int weight;         //该结点权值  
    int ltrt;          //左、右结点下标  
      
    talNode(){}  
      
    talNode(unsigned char _cint _p):  
    c(_c)weight(_p)lt(-1)rt(-1)  
    {}  
      
    talNode(unsigned char _cint _pint lint r)  
        :c(_c)weight(_p)lt(l)rt(r)  
    {}  
      
    bool operator < (talNode a)  
    {//重载运算符“<”用于二叉堆内的比较  
        return weight    }  
      
}HuffNode;  
  
  
  
class CHuffMan{  
    HuffNode arr[512];      //哈夫曼树结点数组  
    int size;               //哈夫曼树结点个数  
    bool code[256][64];     //ASCII对应编码方案  
    int lenth[256];         //ASCII对应编码长度  
  
    //lastcodelenthps[256]用于存储压缩文件中作为文件头  
    int lastcodelenth;      //文件最后一个字符实用几位  
    int ps[256];            //ASCII对应出现频率  
    int soucelentargetlen; //源及目标文件长度  
  
  
    //私有成员函数,用于实现内部功能  
    void SetHuffTree(int []);           //根据字符频率生成哈夫曼树  
    void SetHuffCode(int bool []int );//根据哈夫曼树生成编码方案  
    void CreateHuff(int []);            //创建哈夫曼树及编码方案  
    void EnCodePre(char []);            //压缩前预处理  
    void DeCodePre(FILE *);             //解压前预处理  
    void SaveHuffHead(FILE *);          //保存压缩文件头  
    void ReadHuffHead(FILE *);          //读取压缩文件头  
  
public:  
    CHuffMan(){Clear();}                //构造函数  
    ~CHuffMan

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

     文件       4546  2018-05-23 10:36  哈夫曼\1234.txt

     文件       3490  2018-05-29 20:55  哈夫曼\2345.huf

     文件       4546  2018-05-29 21:05  哈夫曼\3456.txt

     文件     905247  2018-05-23 11:25  哈夫曼\信息化教学设计ppt模板(2)(1).pptx

     文件      14451  2018-05-23 10:26  哈夫曼\压缩文件(哈夫曼树).cpp

     文件    1943033  2018-05-29 20:53  哈夫曼\压缩文件(哈夫曼树).exe

     目录          0  2020-01-28 18:01  哈夫曼

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

              2875313                    7


评论

共有 条评论