资源简介

基于Huffman树的文件压缩C语言源码,自己做的数据结构课程设计。可以安装到系统,实现了文件的右键压缩功能。

资源截图

代码片段和文件信息

//文件解压       ???? 
#include “HuffmanTree.h“
#define NAMESIZE 500

void NextByte(int achar*b)
{
for(int i=0;i<8;i++)
if(a){b[7-i]=48+a%2;a=a/2;}
else b[7-i]=‘0‘;
b[8]=‘#‘;
}
void NextByte_2(int achar*c)
{
char b[8];int i=0;
for( i=0;i<8;i++)
if(a){b[7-i]=48+a%2;a=a/2;}else break;
for(int k=0;k c[k]=b[8-i+k];
// for(;i<7;i++)aa[8*j-8+i]=‘0‘;
c[i]=‘#‘;c[i+1]=‘#‘;
}
Status ReWrite(HuffmanTree &TFILE*print nchar*rezipname)
{
//
char c[9]*s;HuffmanTree p=T+2*n-1;int a=fgetc(pr)w=0;//w为写入文件的数 
if(!feof(pr))NextByte(ac);
else NextByte_2(ac);
s=c;
FILE*pw=fopen(rezipname“wb“); 

 while(!feof(pr)){
  if(*s==‘0‘&&p->lchild)p=T+p->lchild;
 else if(*s==‘1‘&&p->rchild)p=T+p->rchild;

 if(!p->lchild&&!p->rchild){
  if(*s==‘0‘){w=(T+p->parent)->lchild-1;fwrite(&w11pw);}
  else {w=(T+p->parent)->rchild-1;fwrite(&w11pw);}
  p=T+2*n-1;
  }
  s++;
  if(*s==‘#‘){
  a=fgetc(pr);
  if(!feof(pr))NextByte(ac);
else NextByte_2(ac);
s=c;
 }
  }
  fclose(pw);
  return OK;
}
void rezip(const char*s)
{
//s 为压缩文件的地址和文件名。 
if(!s){system(“pause“);exit(1); }
printf(“进行文件解压\n“);
FILE*pr*pw; char sname[NAMESIZE];
int ai=0jn=256m=2*n-1;UInt32 w[256];
HuffmanCode HChc;HuffmanTree HT;
char rezipname[NAMESIZE]=“re“;
i=0;
while(s[i]!=‘.‘)i++;i--;
j=0;
while(s[i]!=92&&i>=0)sname[j++]=s[i--];
i=0;
while(--j>=0){rezipname[2+i]=sname[j];i++;}

rezipname[2+i]=‘.‘;i++;

pr=fopen(s“rb“);
if(!pr){
printf(“无法打开解压文件\n“);exit(1);
}
j=0;a=fgetc(pr);
while(j<4){
rezipname[2+i]=a;if(j<3)a=fgetc(pr);j++;i++;
}
HT=(HuffmanTree)malloc(sizeof(HTNode)*(m+1));
HT[0].weight=0;HT[0].parent=0;HT[0].lchild=0;HT[0].rchild=0;
for(i=1;i<=n;i++){
HT[i].weight=0;//此时不需要权重,所以可以随便赋值。 
HT[i].lchild=0;
HT[i].rchild=0;
}

for(i=n+1;i<=m;i++)
{
HT[i].weight=0;//此时不需要权重,所以可以随便赋值。 
fread(&a21pr);HT[i].lchild=a;HT[a].parent=i;
fread(&a21pr);HT[i].rchild=a;HT[a].parent=i;
}
HT[m].parent=0;
//此时HT为霍夫曼树, 

ReWrite(HTprnrezipname);
fclose(pr);
printf(“解压成功!\n“);
}
int main(int argcchar *argv[])
{
const char*str2;str2=argv[1];
if(argc>0)rezip(str2);
return 0; 
}

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

     文件       1150  2012-11-30 16:44  文件压缩源文件\123.ico

     文件       3064  2013-11-02 13:41  文件压缩源文件\HuffmanTree.h

    ..A..H.      3066  2013-11-02 13:41  文件压缩源文件\HuffmanTree.h~

     文件        611  2013-12-31 23:08  文件压缩源文件\laucher_1.reg

     文件       2353  2013-11-06 23:30  文件压缩源文件\rezip_1.cpp

     文件      30230  2013-12-28 15:42  文件压缩源文件\rezip_1.exe

     文件       4641  2013-12-28 15:42  文件压缩源文件\rezip_1.o

     文件        953  2013-12-19 22:47  文件压缩源文件\setup_C++RAR.cpp

     文件      27047  2013-12-19 22:47  文件压缩源文件\setup_C++RAR.exe

     文件       1850  2013-12-19 22:47  文件压缩源文件\setup_C++RAR.o

     文件       2061  2013-12-28 15:31  文件压缩源文件\zip_1.cpp

     文件      29419  2013-12-28 15:31  文件压缩源文件\zip_1.exe

     文件       4151  2013-12-28 15:31  文件压缩源文件\zip_1.o

     目录          0  2014-02-25 15:38  文件压缩源文件

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

               110596                    14


评论

共有 条评论