資源簡介
基于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
評論
共有 條評論