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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

数据结构课程设计报告哈夫曼.docx

1、数据结构课程设计报告哈夫曼数据结构课程设计报告题目: 趣味游戏之n皇后问题 赫夫曼编码/译码器课程设计 院 系: 计算机工程学院 专业班级: 10软件2ZW 学 号: 10144214 学生姓名: 刘红亮 指导教师: 朱广萍 2012年 02月 22日 数据结构课程设计任务书 学院 计算机工程学院 系 信息与软件工程系 学 号10144214学生姓名刘红亮专业(班级)10软件2设计题目第一类:趣味问题之n皇后问题 第二类:赫夫曼编码/译码器设计技术参数第一类题目设计技术参数:头文件#include #include 调用的函数void place() void print () int fin

2、d()第二类题目设计参数:头文件:#include #include #include #include #include调用的函数:void hfmcoding() 构建赫夫曼树HT,并求出n个字符的赫夫曼编码HC、void Select() Select函数,选出HT树到a为止,权值最小且parent为0的2个节点设计要求第一类题目:求解皇后问题,在N*N的方格棋盘上,放置N个皇后,要求每个皇后不同行、不同列、不同对角线。第二类题目:赫夫曼编码/译码器,基本设计要求:(1) 输入一个待压缩的文本文件名, 统计文本文件中各字符的个数作为权值,生成哈夫曼树;(2) 将文本文件利用哈夫曼树进行编

3、码,生成压缩文件(后缀名cod),(3) 输入一个待解压的压缩文件名称,并利用相应的哈夫曼树将编码序列译码;(4) 显示指定的压缩文件和文本文件;(5) 界面友好,易与操作。采用菜单方式进行选择。工作量编写并完成两个应用程序,设计说明书总字数约3026字,共15页工作计划第一周:理解实验的基本要求,查阅相关资料;整理设计思路,设计算法,完成第一题的调试;第二周:编写第二题程序,调试并完善;最后两天完成设计报告并演示程序。参考资料1数据结构课程设计,苏仕华等编著,机械工业出版社。2.严蔚敏,吴伟民. 数据结构(C语言版). 北京:清华大学出版社,2002.3.李春葆,李三铁. 数据结构考点精要与

4、解题指导. 北京:人民邮电出版社,20024.网上资料等指导教师签字成绩 2012年 02月 22日求解N皇后问题问题描述:编写一个程序,求解皇后问题,在N*N的方格棋盘上,放置N个皇后,要求每个皇后不同行、不同列、不同对角线。求出8个皇后的程序截图源代码:# include# includeconst int N=20; /最多皇后个数int qN; /存放各皇后所在的行号int cont = 0; /存在解个数void print(int n) /输出一个解 cont+; int i; printf(第%d个解:,cont); for (i=1;i=n;i+) printf(%d,qi);

5、 printf(n);int find(int i,int k) /测试第K列的i行上能否摆放皇后 int j; j=1; while(jn) print(n); /所有皇后放置结束 else for (int i=1;i=n;i+) /在第k列上穷举每一个位置 if (find(i,k) qk=i; place(k+1,n); void main() int n; /n存在实际皇后个数 printf(皇后问题(n20) printf(n值太大,不能求解n); else printf(%d皇后问题求解如下:n,n); place(1,n); printf(n); 参考文献:数据结构教程上机实验

6、指导(第三版)一、【问题描述】设计一个哈夫曼编码/译码系统,对一个文本文件中的字符进行哈夫曼编码,生成编码文件(压缩文件,后缀名.cod);反过来,可将一个压缩文件译码还原为一个文本文件(.txt)。二、【基本要求】1 输入一个待压缩的文本文件名, 统计文本文件中各字符的个数作为权值,生成哈夫曼树;2 将文本文件利用哈夫曼树进行编码,生成压缩文件(后缀名cod),3 输入一个待解压的压缩文件名称,并利用相应的哈夫曼树将编码序列译码;4 显示指定的压缩文件和文本文件;5 界面友好,易与操作。采用菜单方式进行选择。三. 问题分析哈夫曼树的定义1.哈夫曼树节点的数据类型定义为:typedef str

7、uct /赫夫曼树的结构体 char ch; int weight; /权值 int parent,lchild,rchild;htnode,*hfmtree;2)所实现的功能函数如下1、void hfmcoding(hfmtree &HT,hfmcode &HC,int n)初始化哈夫曼树,处理InputHuffman(Huffman Hfm)函数得到的数据,按照哈夫曼规则建立2叉树。此函数块调用了Select()函数。2、void Select(hfmtree &HT,int a,int *p1,int *p2) /Select函数,选出HT树到a为止,权值最小且parent为0的2个节点

8、 2、 int main()主函数: 利用已建好的哈夫曼树(如不在内存,则从文件hfmtree.txt中读入)对文件中的正文进行编码,然后将结果存入文件codefile.cod中。如果正文中没有要编码的字符,则键盘读入并存储到ToBeTran文件中。读入ToBeTran中将要编码的内容,将编码好的哈夫曼编码存储到CodeFile中。3、Encoding 编码功能:对输入字符进行编码4、Decoding译码功能: 利用已建好的哈夫曼树将文件codefile.cod中的代码进行译码,结果存入文件textfile.dat 中。 Print() 打印功能函数:输出哈夫曼树,字符,权值,以及它对应的编码

9、。 5.主函数的简要说明,主函数主要设计的是一个分支语句,让用户挑选所实现的功能。使用链树存储,然后分别调用统计频数函数,排序函数,建立哈夫曼函数,编码函数,译码函数来实现功能。四、系统结构功能图五、程序说明 1. 赫夫曼编码/译码器代码#include#include#include#include#includetypedef struct /赫夫曼树的结构体 char ch; int weight; /权值 int parent,lchild,rchild;htnode,*hfmtree;typedef char *hfmcode;void Select(hfmtree &HT,int

10、a,int *p1,int *p2) /Select函数,选出HT树到a为止,权值最小且parent为0的2个节点 int i,j,x,y; for(j=1;j=a;+j) if(HTj.parent=0) x=j; break; for(i=j+1;i=a;+i) if(HTi.weightHTx.weight&HTi.parent=0) x=i; /选出最小的节点 for(j=1;j=a;+j) if(HTj.parent=0&x!=j) y=j; break; for(i=j+1;i=a;+i) if(HTi.weighty) *p1=y; *p2=x; else *p1=x; *p2=

11、y; void hfmcoding(hfmtree &HT,hfmcode &HC,int n) /构建赫夫曼树HT,并求出n个字符的赫夫曼编码HC int i,start,c,f,m,w; int p1,p2; char *cd,z; if(n=1) return; m=2*n-1; HT=(hfmtree)malloc(m+1)*sizeof(htnode); for(i=1;i=n;+i) /初始化n个叶子结点 printf(请输入第%d字符信息和权值:,i); scanf(%c%d,&z,&w); while(getchar()!=n) continue; HTi.ch=z; HTi.

12、weight=w; HTi.parent=0; HTi.lchild=0; HTi.rchild=0; for(;i=m;+i) /初始化其余的结点 HTi.ch=0; HTi.weight=0; HTi.parent=0; HTi.lchild=0; HTi.rchild=0; for(i=n+1;i=m;+i) /建立赫夫曼树 Select(HT,i-1,&p1,&p2); HTp1.parent=i;HTp2.parent=i; HTi.lchild=p1;HTi.rchild=p2; HTi.weight=HTp1.weight+HTp2.weight; HC=(hfmcode)mal

13、loc(n+1)*sizeof(char *); cd=(char *)malloc(n*sizeof(char); cdn-1=0; for(i=1;i=n;+i) /给n个字符编码 start=n-1; for(c=i,f=HTi.parent;f!=0;c=f,f=HTf.parent) if(HTf.lchild=c) cd-start=0; else cd-start=1; HCi=(char*)malloc(n-start)*sizeof(char); strcpy(HCi,&cdstart); free(cd);int main() char code100,h100,hl100

14、; int n,i,j,k,l; ifstream input_file; /文件输入输出流 ofstream output_file; char choice,str100; hfmtree HT; hfmcode HC; coutn; cout 软件(2)班 10144214 刘红亮n; while(choice!=Q&choice!=q) /当choice的值不为q且不为Q时循环 cout *赫夫曼编码/译码器*n; cout I.Init E.Encoding D.Decoding Q.Exitn; coutchoice; if(choice=I|choice=i) /初始化赫夫曼树

15、coutn; hfmcoding(HT,HC,n); for(i=1;i=n;+i) coutHTi.ch:HCiendl; output_file.open(hfmTree.txt); if(!output_file) coutcant oen file!endl; return 1; for(i=1;i=n;i+) output_file(HTi.chHCi); output_file.close(); cout赫夫曼树已经创建完毕,并且已经放入hfmTree.txt文件中!endl; else if(choice=E|choice=e) /进行编码,并将字符放入ToBeTran.txt,

16、码值放入CodeFile.txt中 printf(请输入字符:); gets(str); output_file.open(ToBeTran.txt); if(!output_file) coutcant oen file!endl; return 1; output_filestrendl; output_file.close(); output_file.open(CodeFile.cod); if(!output_file) coutcant oen file!endl; return 1; for(i=0;istrlen(str);i+) for(j=0;j=n;+j) if(HTj.

17、ch=stri) output_fileHCj; break; output_file.close(); coutn; cout编码完毕,并且已经存入CodeFile.cod文件!n; input_file.open(CodeFile.cod); /从CodeFile.cod中读入编码,输出在终端 if(!input_file) coutcant oen file!code; cout编码码值为:codeendl; input_file.close(); else if(choice=D|choice=d) /读入CodeFile.cod中的编码进行译码,将译出来的字符放入Textfile.t

18、xt中 input_file.open(CodeFile.cod); if(!input_file) coutcant oen file!h; input_file.close(); output_file.open(Textfile.txt); if(!output_file) coutcant oen file!endl; return 1; k=0; while(hk!=0) /先用编码中的前几个和字符的编码相比较,然后往后移 for(i=1;i=n;i+) l=k; for(j=0;jstrlen(HCi);j+,l+) hlj=hl; hlj=0; if(strcmp(HCi,hl)

19、=0) output_fileHTi.ch; k=k+strlen(HCi); break; output_file.close(); input_file.open(Textfile.txt); if(!input_file) coutcant oen file!h; couthendl; input_file.close(); cout译码结束,字符已经存入Textfile.txt文件中!endl; else if(choice=Q|choice=q) /退出程序 exit(0); else /如果选了选项之外的就让用户重新选择 cout您没有输入正确的步骤,请重新输入!endl; cou

20、tendl; return 0;六、运行结果和调试分析系统界面 如图:初始化赫夫曼树 如图:编码译码退出七、总结体会 在我自己课程设计中,就在编写好源代码后的调试中出现了不少的错误,遇到了很多麻烦及困难,我的调试及其中的错误和我最终找出错误,修改为正确的能够执行的程序中,通过分析,我学到了:在定义头文件时可多不可少,即我们可多写些头文件,肯定不会出错,但是若没有定义所引用的相关头文件,必定调试不通过;在执行译码操作时,不知什么原因,总是不能把要编译的二进制数与编译成的字符用连接号连接起来,而是按顺序直接放在一起,视觉效果不是很好。还有就是,很遗憾的是,我们的哈夫曼编码/译码器没有像老师要求的那样完成编一个文件的功能,这是我们设计的失败之处。 通过本次数据结构的课程设计,我学习了很多在上课没懂的知识,并对求哈夫曼树及哈夫曼编码/译码的算法有了更加深刻的了解,更巩固了课堂中学习有关于哈夫曼编码的知识,真正学会一种算法了。当求解一个算法时,不是拿到问题就不加思索地做,而是首先要先对它有个大概的了解,接着再详细地分析每一步怎么做,无论自己以前是否有处理过相似的问题,只要按照以上的步骤,必定会顺利地做出来。 这次课程设计,我在编辑中犯了不应有的错误,设计统计字符和合并时忘记应该怎样保存数据,对文件的操作也很生疏。在不断分析后明确并改正了错误和疏漏,我的程序有了更高的质量

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

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