资源简介
基于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
相关资源
- C++中头文件与源文件的作用详解
- C语言代码高亮html输出工具
- 猜数字游戏 c语言代码
- C语言课程设计
- 数字电位器C语言程序
- CCS FFT c语言算法
- 使用C语言编写的病房管理系统
- 通信过程中的RS编译码程序(c语言)
- 计算机二级C语言上机填空,改错,编
- 用回溯法解决八皇后问题C语言实现
- 简易教务管理系统c语言开发文档
- 操作系统课设 读写者问题 c语言实现
- 小波变换算法 c语言版
- C流程图生成器,用C语言代码 生成C语
- 3des加密算法C语言实现
- 简单的C语言点对点聊天程序
- 单片机c语言源程序(51定时器 八个按
- 个人日常财务管理系统(C语言)
- c语言电子商务系统
- 小甲鱼C语言课件 源代码
- 将图片转换为C语言数组的程序
- C语言实现的一个内存泄漏检测程序
- DES加密算法C语言实现
- LINUX下命令行界面的C语言细胞游戏
- 用单片机控制蜂鸣器播放旋律程序(
- 学校超市选址问题(数据结构C语言版
- 电子时钟 有C语言程序,PROTEUS仿真图
- 尚观培训linux许巍老师关于c语言的课
- 算符优先语法分析器(C语言编写)
- 基于C语言的密码锁程序
评论
共有 条评论