资源简介

最新版本 实现了代码的优化 运行效率的提升 还新增了用户界面 代码内附注释 可压缩任何类型的文件 100%解压

资源截图

代码片段和文件信息

#include
#include
#include
#include
#include
using namespace std;

struct element
{
    int weight;
    int lchildrchildparent;
};
void huffman_tree(element* hufftreeint* wint n);//构造叶子节点长为n的哈夫曼树
void select(element* hufftreeint &aint &bint n);//找出权值最小的两个节点
void huffman_code(element* hufftreeint nstring* code);//对哈夫曼树进行编码
void fun(char* strint lenint &n);//对文件的二进制串的数量进行统计 返回含有各个字符频率的数组
string elc(int n);//根据index生成等长二进制编码
void compress();//压缩函数
void decompress();//解压函数
int conversion(string code);//二进制码转十进制
string i_to_s(int l);
int s_to_i(string str);
int getprefix(char *strint lstring &typeint &len);//返回去除了前缀的新下标
string getstr(char* strint beginint l);
int dictionaries[256];//dictionaries对应的是hufftree的下标 知hufftree下标可知哈夫曼编码code[dictionaries[index]]
int freq[256];
string equal_length_code[256];//等长的二进制编码

int main()
{
    string choose;

while(true)
{
cout<<“输入1压缩文件 输入2解压文件 输入其它退出“< cin>>choose;
if(choose==“1“)
compress();
else if(choose==“2“)
decompress();
else
break;
system(“pause“);
}
    return 0;
}

void select(element* hufftreeint &aint &bint n)
{
    int t1t2;
    for(int i=0;i<2*n-1;i++)
    {
        if(hufftree[i].parent==-1)
        {
            t1=i;
            a=i;
            break;
        }
    }
    for(int i=0;i<2*n-1;i++)
    {
        if(hufftree[i].parent==-1&&i!=a)
        {
            t2=i;
            b=i;
            break;
        }
    }
    for(int i=0;i<2*n-1;i++)
    {
        if(hufftree[i].parent==-1&&i!=a&&(i            if(hufftree[i].weight                a=i;
    }
    if(a==b)
        b=t1;
    for(int i=0;i<2*n-1;i++)
    {
        if(hufftree[i].parent==-1&&i!=a&&i!=b&&(i            if(hufftree[i].weight                b=i;
    }
}

void huffman_tree(element* hufftreeint* wint n)
{
    for(int i=0;i<2*n-1;i++)
    {
        hufftree[i].parent=-1;
        hufftree[i].lchild=-1;
        hufftree[i].rchild=-1;
    }
    for(int i=0;i        hufftree[i].weight=w[i];
    for(int i=n;i<2*n-1;i++)
    {
        int ab;
        select(hufftreeabn);
        hufftree[a].parent=i;
        hufftree[b].parent=i;
        hufftree[i].lchild=a;//左最小
        hufftree[i].rchild=b;
        hufftree[i].weight=hufftree[a].weight+hufftree[b].weight;
    }
}

void huffman_code(element* hufftreeint nstring* code)
{
    for(int i=0;i    {
        int p=i;
        while(p!=2*n-2)
        {
            if(hufftree[hufftree[p].parent].lchild==p)
                code[i]=‘0‘+code[i];
            else
                code[i]=‘1‘+code[i];
            p=hufftree[p].parent;
        }
    }
}

void fun(char* strint lenint &n)
{
    n=0;

    for(int i=0;i    {
 

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2018-12-13 19:40  新建文件夹\
     目录           0  2018-12-13 19:39  新建文件夹\lmycompress\
     文件       13217  2018-12-10 23:57  新建文件夹\lmycompress\compress_decompress.h
     文件         401  2018-12-11 00:06  新建文件夹\lmycompress\lmycompress.pro
     文件       23856  2018-12-11 11:20  新建文件夹\lmycompress\lmycompress.pro.user
     文件         175  2018-12-10 23:44  新建文件夹\lmycompress\main.cpp
     文件         831  2018-12-11 00:21  新建文件夹\lmycompress\widget.cpp
     文件         426  2018-12-10 23:57  新建文件夹\lmycompress\widget.h
     文件        1824  2018-12-10 23:59  新建文件夹\lmycompress\widget.ui
     文件       14267  2018-12-11 20:42  新建文件夹\压缩.cpp
     目录           0  2018-12-13 19:39  新建文件夹\成品 可执行文件\
     文件     3643904  2018-04-12 07:34  新建文件夹\成品 可执行文件\D3Dcompiler_47.dll
     文件     5364224  2018-12-11 22:38  新建文件夹\成品 可执行文件\Qt5Core.dll
     文件     5650432  2016-05-26 01:16  新建文件夹\成品 可执行文件\Qt5Gui.dll
     文件      357888  2016-05-26 12:41  新建文件夹\成品 可执行文件\Qt5Svg.dll
     文件     6522368  2016-05-26 01:22  新建文件夹\成品 可执行文件\Qt5Widgets.dll
     目录           0  2018-12-13 19:38  新建文件夹\成品 可执行文件\iconengines\
     文件       43520  2016-05-26 12:41  新建文件夹\成品 可执行文件\iconengines\qsvgicon.dll
     目录           0  2018-12-13 19:38  新建文件夹\成品 可执行文件\imageformats\
     文件       58880  2016-05-26 15:42  新建文件夹\成品 可执行文件\imageformats\qdds.dll
     文件       33280  2016-05-26 01:25  新建文件夹\成品 可执行文件\imageformats\qgif.dll
     文件       46592  2016-05-26 15:42  新建文件夹\成品 可执行文件\imageformats\qicns.dll
     文件       35328  2016-05-26 01:25  新建文件夹\成品 可执行文件\imageformats\qico.dll
     文件      251904  2016-05-26 01:24  新建文件夹\成品 可执行文件\imageformats\qjpeg.dll
     文件       28672  2016-05-26 12:41  新建文件夹\成品 可执行文件\imageformats\qsvg.dll
     文件       27648  2016-05-26 15:42  新建文件夹\成品 可执行文件\imageformats\qtga.dll
     文件      496640  2016-05-26 15:42  新建文件夹\成品 可执行文件\imageformats\qtiff.dll
     文件       27648  2016-05-26 15:42  新建文件夹\成品 可执行文件\imageformats\qwbmp.dll
     文件      366080  2016-05-26 15:43  新建文件夹\成品 可执行文件\imageformats\qwebp.dll
     文件       20992  2016-05-26 01:09  新建文件夹\成品 可执行文件\libEGL.dll
     文件     2296320  2016-05-26 01:09  新建文件夹\成品 可执行文件\libGLESV2.dll
............此处省略25个文件信息

评论

共有 条评论