ImageVerifierCode 换一换
格式:DOCX , 页数:28 ,大小:349.40KB ,
资源ID:9080241      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/9080241.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(数据结构课程设计哈夫曼编码译码器.docx)为本站会员(b****7)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

数据结构课程设计哈夫曼编码译码器.docx

1、数据结构课程设计哈夫曼编码译码器题目一:哈夫曼编码与译码一、任务设计一个利用哈夫曼算法的编码和译码系统,重复地显示并处理以下项目,直到选择退出为止。要求:1)将权值数据存放在数据文件(文件名为data.txt,位于执行程序的当前目录中) ;2)初始化:键盘输入字符集统计字符权值、自定义26个字符和26个权值、统计文件中一篇英文文章中26个字母,建立哈夫曼树;3)编码:利用建好的哈夫曼树生成哈夫曼编码;4)输出编码(首先实现屏幕输出,然后实现文件输出);5) 译码(键盘接收编码进行译码、文件读入编码进行译码);6)界面优化设计。二、流程图三、代码分解/头文件#include#include#in

2、clude#include #define N 1000#define M 2*N-1#define MAXcode 6000/函数声明void count(CHar &ch,HTNode ht);void editHCode(HTNode ht,HCode hcd,CHar &ch,int n,char bianma); /编码函数void printyima(HTNode ht,HCode hcd,int n,char bianma); /译码函数void creatHT(HTNode ht,int n);void CreateHCode (HTNode ht,HCode hcd,int

3、n);void DispHCode(HTNode ht,HCode hcd,int n);void input_key(CHar &ch);void input_file(CHar &ch);void input_cw(HTNode ht);void bianma1(HTNode ht,HCode hcd,CHar &ch,int n,char bianma);void bianma2(HTNode ht,HCode hcd,CHar &ch,int n,char bianma);void yima1(HTNode ht,HCode hcd,int n,char bianma);void yi

4、ma2(HTNode ht,HCode hcd,int n,char bianma);void creat_cw();void bianmacaidan();void yimacaidan();void bianmayima();int caidan(); /结构体typedef struct char data; int parent; int weight; int lchild; int rchild;HTNode;typedef struct char cdN; int start;HCode;typedef struct char sN; int num;CHar;CHar ch;H

5、TNode htM;HCode hcdN;/主函数int main() int xh; while(1) system(color 1f); /操作菜单背景颜色 xh=caidan(); /调用菜单函数 switch(xh) /switch语句 case 1:system(cls);creat_cw();break; case 2:system(cls);creatHT(ht,n);break; case 3:system(cls);CreateHCode(ht,hcd,n);DispHCode(ht,hcd,n);break; case 4:system(cls);bianmayima();

6、break; case 0:system(cls);printf(nnnnnnnnntttt感谢使用本系统!nnnnnnn ttt);exit(0); default:system(cls);putchar(a); printf(ntt输入有误,请重新输入:n);break; return 0;/菜单函数int caidan() /菜单函数模块/ int xh; printf(nnn); printf(tt 欢迎使用哈夫曼编码译码系统 n); printf(tt n); printf(tt*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*n); prin

7、tf(tt*= =*n); printf(tt*= *=*=*=*=*=*=*=*=*=*=*= =*n); printf(tt*= 1.建立字符权值 =*n); printf(tt*= *=*=*=*=*=*=*=*=*=*=*= =*n); printf(tt*= 2.建立并输出哈夫曼树 =*n); printf(tt*= *=*=*=*=*=*=*=*=*=*=*= =*n); printf(tt*= 3.生成并查看哈夫曼编码 =*n); printf(tt*= *=*=*=*=*=*=*=*=*=*=*= =*n); printf(tt*= 4.编码与译码 =*n); printf(t

8、t*= *=*=*=*=*=*=*=*=*=*=*= =*n); printf(tt*= 0.退出系统 =*n); printf(tt*= =*n); printf(tt*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*n); printf(ntt请输入序号进行选择:); scanf(%d, &xh); return xh; /返回从键盘接收的选项void bianmayima() int xh; while(1) printf(nnnnn); printf(tt 编码与译码 n); printf(tt n); printf(tt*= *=*=*=*=*

9、=*=*=*=*=*=*=*=*=*=* =*n); printf(tt*= 1.编码 =*n); printf(tt*= *=*=*=*=*=*=*=*=*=*=*=*=*=*=* =*n); printf(tt*= 2.译码 =*n); printf(tt*= *=*=*=*=*=*=*=*=*=*=*=*=*=*=* =*n); printf(tt*= 0.返回上级菜单 =*n); printf(tt*= *=*=*=*=*=*=*=*=*=*=*=*=*=*=* =*n); printf(ntt请输入序号进行选择:); scanf(%d,&xh); switch(xh) /switch

10、语句 case 1:system(cls);bianmacaidan();break; case 2:system(cls);yimacaidan();break; case 0:system(cls);return; default:system(cls);putchar(a); printf(ntt输入有误,请重新输入:n);break; void yimacaidan() int xh; while(1) printf(nnnnn); printf(tt 译码 n); printf(tt n); printf(tt*= *=*=*=*=*=*=*=*=*=*=*=*=*=*=* =*n)

11、; printf(tt*= 1.键盘输入编码进行译码 =*n); printf(tt*= *=*=*=*=*=*=*=*=*=*=*=*=*=*=* =*n); printf(tt*= 2.文件读入编码进行译码 =*n); printf(tt*= *=*=*=*=*=*=*=*=*=*=*=*=*=*=* =*n); printf(tt*= 0.返回上级菜单 =*n); printf(tt*= *=*=*=*=*=*=*=*=*=*=*=*=*=*=* =*n); printf(ntt请输入序号进行选择:); scanf(%d,&xh); switch(xh) /switch语句 case 1

12、:system(cls);yima1(ht,hcd,n,bianma);break; case 2:system(cls);yima2(ht,hcd,n,bianma);break; case 0:system(cls);return; default:system(cls);putchar(a); printf(ntt输入有误,请重新输入:n);break; void bianmacaidan() int xh; while(1) printf(nnnnn); printf(tt 编码 n); printf(tt n); printf(tt*= *=*=*=*=*=*=*=*=*=*=*=*

13、=*=*=* =*n); printf(tt*= 1.键盘输入字符集编码 =*n); printf(tt*= *=*=*=*=*=*=*=*=*=*=*=*=*=*=* =*n); printf(tt*= 2.文件读入文章编码 =*n); printf(tt*= *=*=*=*=*=*=*=*=*=*=*=*=*=*=* =*n); printf(tt*= 0.返回上级菜单 =*n); printf(tt*= *=*=*=*=*=*=*=*=*=*=*=*=*=*=* =*n); printf(ntt请输入序号进行选择:); scanf(%d,&xh); switch(xh) /switch语

14、句 case 1:system(cls);bianma1(ht,hcd,ch,n,bianma);break; case 2:system(cls);bianma2(ht,hcd,ch,n,bianma);break; case 0:system(cls);return; default:system(cls);putchar(a); printf(ntt输入有误,请重新输入:n);break; void creat_cw() int xh2; while(1) printf(nnnnn); printf(tt 建立字符权值 n); printf(tt n); printf(tt*= *=*=

15、*=*=*=*=*=*=*=*=*=*=*=*=* =*n); printf(tt*= 1.从键盘输入字符集进行统计 =*n); printf(tt*= *=*=*=*=*=*=*=*=*=*=*=*=*=*=* =*n); printf(tt*= 2.从文件读入字符集统计 =*n); printf(tt*= *=*=*=*=*=*=*=*=*=*=*=*=*=*=* =*n); printf(tt*= 3.自定义字符权值 =*n); printf(tt*= *=*=*=*=*=*=*=*=*=*=*=*=*=*=* =*n); printf(tt*= 0.返回上级菜单 =*n); print

16、f(tt*= *=*=*=*=*=*=*=*=*=*=*=*=*=*=* =*n); printf(ntt请输入序号进行选择:); scanf(%d,&xh2); switch(xh2) /switch语句 case 1:system(cls);input_key(ch);break; case 2:system(cls);input_file(ch);break; case 3:system(cls);input_cw(ht);break; case 0:system(cls);return; default:system(cls);putchar(a); printf(ntt输入有误,请重

17、新输入:n);break; /建立字符权值模块void input_key(CHar &ch) int i,j=0; char stN; printf(请输入字符集(以#结束):n); for(i=0;iN;i+) scanf(%c,&sti); if(sti=#) sti=0;break; strcpy(ch.s,st); ch.num=strlen(st); count(ch,ht); printf(按任意键返回!); getch(); system(cls); return;void input_file(CHar &ch) int i; FILE*fp; char filename20

18、; printf(请输入要打开的文件名(*.txt):); scanf(%s,&filename); if(fp=fopen(filename,r)=NULL) printf(ntt文件打开失败!); return; for(i=0;!feof(fp);i+) fread(&ch.si,sizeof(char),1,fp); ch.num=strlen(ch.s); printf(读入成功!n); printf(文件中的字符集为:%sn,ch.s); fclose(fp); count(ch,ht); printf(按任意键返回!); getch(); system(cls); return;

19、void input_cw(HTNode ht) int i,w,s,j; char a; printf(要输入的字符总个数是?:); scanf(%d,&s); n=s; printf(请输入字符及其权值:n); for(i=0;is;i+) printf(请输入第%d个字母:,i+1); scanf(%s,&a); hti.data=a; printf(请输入其权值:); scanf(%d,&w); hti.weight=w; FILE *fp; if(fp=fopen(data.txt,w)=0) printf(ntt文件打开失败!); return; printf(n定义权值成功!nn

20、); printf(各字符及其权值为:nn); fprintf(fp,各字符及其权值为:n); printf( 字符t权值); fprintf(fp, 字符t权值); for(j=0;ji;j+) printf(n); fprintf(fp,n); printf( %-8c%-8d,htj.data,htj.weight); fprintf(fp, %-8c%-8d%,htj.data,htj.weight); printf(n); printf(n字符权值已输出至文件“data.txt”!); fclose(fp); printf(输入完成,按任意键返回!); getch(); system

21、(cls); return;/统计字符权值函数void count(CHar &ch,HTNode ht) int i,j,m=0; char cN; int sumN=0; for(i=0;ch.si!=0;i+) for(j=0;j=a&cj=z&ch.si+32=cj) break; if(j=A&ch.si=Z) cj=ch.si+32; else cj=ch.si; sumj+; m+; for(i=0;im;i+) hti.data=ci; hti.weight=sumi; n=m; FILE *fp; if(fp=fopen(data.txt,w)=0) printf(ntt文件

22、打开失败!); return; printf(n统计权值成功!nn); printf(各字符及其权值为:nn); fprintf(fp,各字符及其权值为:n); printf( 字符t权值); fprintf(fp, 字符t权值); for(j=0;jm;j+) printf(n); fprintf(fp,n); printf( %-8c%-8d,htj.data,htj.weight); fprintf(fp, %-8c%-8d%,htj.data,htj.weight); printf(n); printf(n字符权值已输出至文件“data.txt”!); fclose(fp);/构造哈夫

23、曼树void creatHT(HTNode ht,int n) FILE *fp; if(fp=fopen(哈夫曼树.txt,w)=0) printf(ntt文件打开失败!); return; int i,j,k,lnode,rnode; int min1,min2; for (i=0;i2*n-1;i+) hti.parent=hti.lchild=hti.rchild=-1; for (i=n;i2*n-1;i+) min1=min2=32767; lnode=rnode=-1; for(k=0;k=i-1;k+) if(htk.parent=-1) if (htk.weightmin1)

24、 min2=min1;rnode=lnode; min1=htk.weight;lnode=k; else if(htk.weightmin2) min2=htk.weight;rnode=k; htlnode.parent=i;htrnode.parent=i; hti.weight=htlnode.weight+htrnode.weight; hti.lchild=lnode;hti.rchild=rnode; printf(建立huffman树成功!n); printf(输出huffman树:n); fprintf(fp,输出huffman树:n); printf(t字符t权值t父节点t

25、 左子节点t右子节点); fprintf(fp,t字符t权值t父节点t 左子节点t右子节点); for(j=1;ji;j+) printf(n); fprintf(fp,n); printf(t %-8c%-8d%-10d%-14d%-10d,htj.data,htj.weight,htj.parent,hti.lchild,htj.rchild); fprintf(fp,t %-8c%-8d%-10d%-14d%-10d,htj.data,htj.weight,htj.parent,hti.lchild,htj.rchild); printf(n); printf(哈夫曼树已输出至文件“哈夫

26、曼树.txt”!按任意键返回!); fclose(fp); getch(); system(cls); return;/生成哈夫曼编码void CreateHCode (HTNode ht,HCode hcd,int n) int i,f,c,j=0; HCode hc; for(i=0;in;i+) hc.start=n;c=i; hc.cdhc.start-=0; f=hti.parent; while(f!=-1) if (htf.lchild=c) hc.cdhc.start-=0; else hc.cdhc.start-=1; c=f;f=htf.parent; hc.start+; for(j=0;jhc.start;j

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1