资源简介

基于vc++6.0实现哈夫曼编码及文件译码操作,统计源文件中字符数目,对字符进行哈夫曼编码,以此作为密码对文件进行加密,得到加密后的二进制文件,从二进制文件中读取内容,使用哈夫曼树进行译码得到译码后的文件,并与源文件进行对比。

资源截图

代码片段和文件信息

#include “Huffman.h“


Bool Isempty(BTree Bt)
{
return (Bt.Root==NULL);
}

T DataBt(BTree Bt)
{
return Bt.Root->data;
}

BTree LchildBt(BTree Bt)
{
BTree BT; 
BT.Root=Bt.Root->lchild;
return BT;
}

BTree RchildBt(BTree Bt)
{
BTree BT; 
BT.Root=Bt.Root->rchild;
return BT;
}

BTNode* NewNode()
{
BTNode* p=(BTNode*)malloc(sizeof(BTNode));
if(IS_FULL(p))
{
fprintf(stderr“the memeny is full\n“);
exit(1);
}
return p;
}

void CreateBT(BTree *BT)
{
BT->Root=NULL;
}

void MakeBT(BTree* BtT xBTree *LtBTree *Rt)
{
BTNode* p=NewNode();
p->data=x;
p->lchild=Lt->Root;
p->rchild=Rt->Root;
Bt->Root=p;
}
void BreakBT(BTree* BtT *xBTree* LtBTree* Rt)
{
BTNode *p=Bt->Root;
if(p)
{
*x=p->data;
Lt->Root=p->lchild;
Rt->Root=p->rchild;
Bt->Root=NULL;
free(p);
}
}

void Visit(T x)
{
cout<}

void Preorder(BTree Bt)
{
if(!Isempty(Bt))
{
Visit(DataBt(Bt));
// cout<code.letter;
Preorder(LchildBt(Bt));
Preorder(RchildBt(Bt));
}
}

void Inorder(BTree Bt)
{
if(!Isempty(Bt))
{
Inorder(LchildBt(Bt));
Visit(DataBt(Bt));
Inorder(RchildBt(Bt));
}
}

void Postorder(BTree Bt)
{
if(!Isempty(Bt))
{
Postorder(LchildBt(Bt));
Postorder(RchildBt(Bt));
Visit(DataBt(Bt));
}
}

int SizeofBt(BTree Bt)
{
int ss1s2;
if(Bt.Root==NULL)return 0;
else
{
s1=SizeofBt(LchildBt(Bt));
s2=SizeofBt(RchildBt(Bt));
s=s1+s2+1;
return s;
}
}

int max(int xint y)
{
if(x>=y)
return x;
else return y;
}

int DepthofBt(BTree Bt)
{
if(Bt.Root==NULL) return 0;
else
return 1+max(DepthofBt(LchildBt(Bt))DepthofBt(RchildBt(Bt)));
}

BTNode* Copy(BTNode* p)
{
BTNode* q; 
if (!p) return NULL; 
q=NewNode(); 
q->data=p->data; 
q->lchild=Copy(p->lchild); 
q->rchild=Copy(p->rchild); 
return q;  
}

BTree CopyBt(BTree Bt)
{
BTree a;
a.Root=Copy(Bt.Root);
return a;
}


void swap(int xint y)
{
int z;
z=x;
x=y;
y=z;
}
void bubble_sort(BTree arr[]int lenint *k1int *k2)
{
int ij;
int BtBt1;

int min=25536;
for(i=0;i {
if(min>DataBt(arr[i]))
{
min=DataBt(arr[i]);
Bt=i;
}
}
min=25536;
for(j=0;j {
if(min>DataBt(arr[j])&&Bt!=j)
{
min=DataBt(arr[j]);
Bt1=j;
}
}
*k1=Bt;
*k2=Bt1;


}

void Fmin(BTree ht[]int *k1int *k2int k)
{
bubble_sort(htkk1k2);
}

BTree CreateHuffman(Letter w[]int n)
{
BTree zero;
BTree ht[MaxSize];
int ikk1k2;
CreateBT(&zero);
for(i=0;i {
MakeBT(&ht[i]w[i].count&zero&zero);
ht[i].Root->code.letter=w[i].data;
// cout<code.letter;
}
for(k=n-1;k>0;k--)
{
Fmin(ht&k1&k2k);
MakeBT(&ht[k1]DataBt(ht[k1])+DataBt(ht[k2])&ht[k1]&ht[k2]);
ht[k2]=ht[k];
}
// cout< return ht[0];
}

void printfstr(char *s)
{
int i;
for(i=0;s[i]!=‘\0‘;i++)
cout<

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     文件         399  2018-10-07 22:11  code.txt
     目录           0  2018-10-07 22:11  Debug\
     文件      379312  2018-10-07 22:11  Debug\Huffman.obj
     文件           0  2018-10-07 22:11  Debug\Huffman.sbr
     文件      467968  2018-10-07 22:11  Debug\String.bsc
     文件      606258  2018-10-07 22:11  Debug\String.exe
     文件      884140  2018-10-07 22:11  Debug\String.ilk
     文件      298575  2018-10-07 15:05  Debug\String.obj
     文件     2271924  2018-10-07 22:11  Debug\String.pch
     文件     1377280  2018-10-07 22:11  Debug\String.pdb
     文件           0  2018-10-07 15:05  Debug\String.sbr
     文件      107520  2018-10-07 22:11  Debug\vc60.idb
     文件      135168  2018-10-07 22:11  Debug\vc60.pdb
     文件        6363  2018-10-07 22:11  Huffman.cpp
     文件       55516  2018-10-07 22:11  huffman.dat
     文件         398  2018-10-07 14:50  Huffman.h
     文件        1450  2018-10-07 15:05  String.cpp
     文件        3592  2018-09-29 00:46  String.dsp
     文件         535  2018-09-29 00:46  String.dsw
     文件         566  2018-10-07 14:50  String.h
     文件       58368  2018-10-07 22:23  String.ncb
     文件       50688  2018-10-07 22:23  String.opt
     文件        1327  2018-10-07 22:11  String.plg
     文件       10189  2018-10-07 15:10  student.txt
     文件       10189  2018-10-07 22:11  STUDENTCopy.txt

评论

共有 条评论