云题海 - 专业文章范例文档资料分享平台

当前位置:首页 > 数据结构课程设计-赫夫曼编码

数据结构课程设计-赫夫曼编码

  • 62 次阅读
  • 3 次下载
  • 2025/5/31 0:25:22

1、建立哈夫曼树

//-------------------------------------初始化--------------------------------------

int min(HfmTeee &t,int x) //查找权值最小的树 { int flag; int k=999999999; for(int i=1;i<=x;i++) { if(t[i].weight

void Find(HfmTeee &H,int x,int *p1,int *p2) //查找权值最小的两棵树 {

*p1=min(H,x); *p2=min(H,x); if(*p1>*p2) { int t=*p1; *p1=*p2; *p2=t; } }

void CreateHfmTree(HfmTeee &H,HuffCode &Code,int n) //构建哈夫曼树 { int i,start,c,f,m,w; int p1,p2; char *cd,z;

if(n<=1){ //如果节点小于1,无法构造! return; }

m=2*n-1;

H=(HfmTeee)malloc((m+1)*sizeof(HtNode)); for(i=1;i<=n;++i) {

9

printf(\请输入第%d字符信息和权值:\ scanf(\ while(getchar()!='\\n') continue; H[i].ch=z;

H[i].weight=w; H[i].parent=0; H[i].lchild=0; H[i].rchild=0; }

for(;i<=m;++i) {

H[i].ch='0'; H[i].weight=0; H[i].parent=0; H[i].lchild=0; H[i].rchild=0; }

for(i=n+1;i<=m;++i) {

Find(H,i-1,&p1,&p2);

H[p1].parent=i;H[p2].parent=i; H[i].lchild=p1;H[i].rchild=p2;

H[i].weight=H[p1].weight+H[p2].weight; }

Code=(HuffCode)malloc((n+1)*sizeof(char *)); cd=(char *)malloc(n*sizeof(char)); cd[n-1]='\\0';

for(i=1;i<=n;++i) //进行哈夫曼编码 {

start=n-1;

for(c=i,f=H[i].parent;f!=0;c=f,f=H[f].parent) {

if(H[f].lchild==c) cd[--start]='0'; else

cd[--start]='1'; }

Code[i]=(char*)malloc((n-start)*sizeof(char)); strcpy(Code[i],&cd[start]);

} ofstream oFile(\10

//以清空方式

打开文件,并写入

if(!oFile) { cout<<\ return ; }

oFile<

{ oFile<

oFile.close();

cout<<\赫夫曼树已经创建完毕,并且已经放入hfmTree.txt文件中!\ free(cd);

ok=1; }

2、编码

//-------------------------------------编码--------------------------------------

void Encoding(HfmTeee H,HuffCode code,int leaves) { char str[100];

cout<<\请输入字符:\

getchar(); gets(str); ofstream oFile(\if(!oFile) { cout<<\ return ; } oFile<

ifstream iFile(\

if(!iFile) {

cout<<\对不起您未建哈夫曼树同时文件中也不存在!\

11

return ; }

char ch,th,str1[20]; iFile>>leaves;

H=(HfmTeee)malloc((leaves+1)*sizeof(HtNode));

code=(HuffCode)malloc((leaves+1)*sizeof(char *)); int ant=1;

while(iFile.peek()!=EOF) {

iFile.get(ch);//接收上一行的换行符 iFile.get(ch); iFile>>th>>str1; int l=strlen(str1); H[ant].ch=ch;

code[ant]=(char*)malloc((l+1)*sizeof(char)); strcpy(code[ant++],str1); }

iFile.close(); }

for(int i=0;i

oFile1<

cout<<\译码结束,字符已经存入CodeFile.txt文件中!\}

3、译码

//-------------------------------------译码--------------------------------------

void Decoding(HfmTeee h,HuffCode code,int leaves) { char str[100000]; char temp[100];

cout<<\对CodeFile.txt的数据进行编译……\ if(ok==0)

12

搜索更多关于: 数据结构课程设计-赫夫曼编码 的文档
  • 收藏
  • 违规举报
  • 版权认领
下载文档10.00 元 加入VIP免费下载
推荐下载
本文作者:...

共分享92篇相关文档

文档简介:

1、建立哈夫曼树 //-------------------------------------初始化-------------------------------------- int min(HfmTeee &t,int x) //查找权值最小的树 { int flag; int k=999999999;

× 游客快捷下载通道(下载后可以自由复制和排版)
单篇付费下载
限时特价:10 元/份 原价:20元
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:fanwen365 QQ:370150219
Copyright © 云题海 All Rights Reserved. 苏ICP备16052595号-3 网站地图 客服QQ:370150219 邮箱:370150219@qq.com