资源简介
最新版本 实现了代码的优化 运行效率的提升 还新增了用户界面 代码内附注释 可压缩任何类型的文件 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个文件信息
- 上一篇:使用C++开发的双人五子棋游戏()
- 下一篇:自己用c++做的一个弹球小游戏
相关资源
- Visual C++ 用户界面制作与应用 pdf VC
- 《Visual C++ 6.0 用户界面制作技术与应
- C++实战源码-AVI文件压缩工具
- C语言 文件压缩和解压
- 文件系统的用户界面[含答案]
- 基于Huffman树的文件压缩C语言源码数据
- MFC创建用户界面线程方法2
- 用哈夫曼编码实现文件压缩代码+报告
- 基于哈夫曼编码的文件压缩解压程序
- 基于哈夫曼编码的文本文件压缩与解
- 实现对任意格式文件压缩 C++
- MFC用户界面线程的创建
- zip文件压缩解压源码 c++
- C++ 文件压缩
- mfc用户界面设计
- MFC用户界面线程举例
- Huffman文件压缩解压缩-C语言-数据结构
- 文件压缩与解压C++
评论
共有 条评论