欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    数据结构课程设计-实例.doc

    • 资源ID:28440125       资源大小:295KB        全文页数:41页
    • 资源格式: DOC        下载积分:15金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要15金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    数据结构课程设计-实例.doc

    Four short words sum up what has lifted most successful individuals above the crowd: a little bit more.-author-date数据结构课程设计-实例数据结构课程设计-实例数据结构课 程 设 计 报 告 书题目:赫 夫 曼 编 码 系别:计算机科学与应用 学号: 051007222 学生姓名: 牛 志 远 指导教师: 王亚楠 完成日期:2007年2月1日 一需要分析赫夫曼编码自己找一篇不少于100个单词的英文文章,分析该文章中每一个字符的出现概率(包括标点符号,区分大小写),根据分析结果对文章中每一个字符进行赫夫曼编码,并将编码原则存储于一个独立的文本文件中。最后,根据这个编码原则,将英文文章转换为01串存储于一个文本文件中。如:英文文章为aaabbc则编码规则为a-0 b-10c-11英文文章将被转化为000101011 有能力的同学应该再编写一个解码程序,这个就不统一要求。二 概要设计1 系统运行时,将有ifstream fs("n.txt")句生成一文本文件,用于存放要编码的英文文章。2 然后,将有fs.get(c)语句从文章中逐个读入字符,其字符的ASCII码值将存入int w2128的对应下标中,且对应w2i的值加1。之后,将ASCII码值及对应字符出现次数记录于一动态分配的机构体tongji数组*w中。3 然后,将调用赫夫曼编码函数HuffmanCoding(HT,HC,w,n)对文章中出现的字符进行编码,并将结果存于数组HC中。4 有ofstream fp("code.txt")打开勇于存储编码后的文章。5 对01码的解码程序将有函数Decoding()执行。三 详细设计#include<iostream.h>#include<string.h>#include<stdlib.h>#define MAX_NUM 100000#include<fstream.h> typedef struct int index;/用于记录字符的ASCII码int frequent;/用于记录字符出现的次数 tongji;/该结构体用于对统计文章中字符出现的次数,及该字符对应的整数值(用于字符与编码的转换)typedef struct unsigned int weight; unsigned int parent,lchild,rchild;HTNode,*HuffmanTree;/动态分配数组存储赫夫曼树typedef char *HuffmanCode;/动态分配数组存储赫夫曼编码表/Select()函数,用于选择两个weight最小的结点void Select(HuffmanTree HT,int end,int *s1,int *s2)/cout<<end<<endl; int i; int min1=MAX_NUM; int min2; for (i=1;i<=end;i+) if (HTi.parent=0&&HTi.weight<min1) *s1=i; min1=HTi.weight; min2=MAX_NUM; for(i=1;i<=end;i+) if(HTi.parent=0&&(*s1!=i)&&HTi.weight<min2) *s2=i; min2=HTi.weight; void HuffmanCoding(HuffmanTree &HT,HuffmanCode &HC,tongji w,int n)/w存放n个字符的权值(均>0),构造赫夫曼树HT,并求出n个字符的赫夫曼编码HC if(n<=1)return; tongji *t=w+1; int m=2*n-1; HuffmanTree p;int i; HT=(HuffmanTree)malloc(m+1)*sizeof(HTNode); for(p=HT,i=1;i<=n;+i,+t) pi.weight=t->frequent;pi.parent=0;pi.lchild=0;pi.rchild=0; /*p=*w,0,0,0; for(;i<=m;+i)pi.weight=0;pi.parent=0;pi.lchild=0;pi.rchild=0;/*p=0,0,0,0; int s1,s2; for(i=n+1;i<=m;+i) /在HT1.i-1选择parent为0且weight最小的两个结点,其序号分别为s1和s2。 Select(HT,i-1,&s1,&s2);HTs1.parent=i;HTs2.parent=i;HTi.lchild=s1;HTi.rchild=s2;HTi.weight=HTs1.weight+HTs2.weight; /-从叶子到根逆向求每个字符的赫夫曼编码-/*int start,c,f;HC=(HuffmanCode)malloc(n+1)*sizeof(char *);char *cd; cd=(char *)malloc(n*sizeof(char); cdn-1='0' for(i=1;i<=n;+i)/逐个字符求赫夫曼编码 start=n-1; for(c=i,f=HTi.parent;f!=0;c=f,f=HTf.parent)/从叶子到根逆向求编码 if(c=HTf.lchild) cd-start='0' else cd-start='1' HCi=(char *)malloc(n-start)*sizeof(char); strcpy(HCi,&cdstart); free(cd);/释放工作空间*/-从根到叶子求编码- HC=(HuffmanCode)malloc(n+1)*sizeof(char*);/分配n个字符编码的头指针向量 char *cd; cd=(char*)malloc(n*sizeof(char);/分配求编码的工作空间 cdn-1='0'/编码结束符 int q=m;int cdlen=0; for(i=1;i<=m;+i) HTi.weight=0;/遍历赫夫曼树时用作结点状态标志 while (q) if(HTq.weight=0)/向左 HTq.weight=1;if(HTq.lchild!=0)q=HTq.lchild; cdcdlen+='0'else if(HTq.rchild=0)/登记叶子结点的字符的编码 HCq=(char*)malloc(cdlen+1)*sizeof(char);/为第i个字符编码分配空间 cdcdlen='0'strcpy(HCq,cd);/从cd复制编码(串)到HC else if(HTq.weight=1)/向右 HTq.weight=2;if(HTq.rchild!=0)q=HTq.rchild;cdcdlen+='1' else/HTq.weight=2,退回 HTq.weight=0;q=HTq.parent;-cdlen;/退到父结点,编码长度减1 /else /while/主函数void main() HuffmanTree HT;HuffmanCode HC; int n=128; / int w20=0,5,29,7,8,14,23,3,11; /for(int i=1;i<9;i+)cout<<HCi<<endl; ifstream fs("n.txt");/该语句将自动创建并打开一个“n.txt”文本文件,用于要翻译的英文文章 char c; int w2128;/对应128个ASCII码值 for(int i=1;i<128;i+)w2i=0; while(fs.get(c) int a=c;w2a+;/统计各个字符出现的次数 fs.close(); tongji *w; w=new tongji100;/用new动态分配空间 int k=0;cout<<"字符的存储位置,对应ASCCII码值及出现次数依次为:"<<endl; for(i=0;i<128;i+) if(w2i>0) k+;wk.frequent=w2i;/wk.frequent存储字符出现次数wk.index=i;/存储字符的ASCII码值cout<<"k="<<k<<" "<<"i="<<i<<" "<<wk.frequent<<endl; n=k;/表明要对n=k个进行编码HuffmanCoding(HT,HC,w,n);/调用赫夫曼编码函数cout<<"各个字符对应编码(每行显示5个字符编码)依次为:"<<endl; for( i=1;i<=k;i+)cout<<HCi<<" "if(i%5=0)cout<<endl;/显示各个字符的编码 fs.open("n.txt"); char ch; tongji *ptr;ptr=w; /创建并打开“code.txt”文件,存储编码结果 ofstream fp("code.txt"); while(fs.get(ch) int b=ch; for(i=1;i<=k;i+) if(wi.index=b)fp<<HCi; fp.close();/main()四 调试分析1 本题是利用赫夫曼树对一篇英文文章进行编码,起初感到无从下手,通过老师的讲解及对课本相关内容的分析,了解了其一般的思路,掌握该设计的基本方法。经过小组的商讨及不断的调试,完成了该项设计。2 对赫夫曼树的构造及其编码的详细过程不会程序化,经过仔细看书和同学交流,经过不断调试,最终实现。3 设计中用到文件的输入输出,其中对于文件中字符的提取及把字符读入到文件不清楚,通过对相关知识的了解及不断尝试最终得到了解决。五 测试结果要编码的英文文章及“n.txt”内容为:编码结果及“code.txt”为:屏幕显示结果为: 附加:该程序对应解码程序为:void Decoding(HuffmanCode HC,int n) int i=0,k,t; char c,ch; char *pstr; pstr=new charn; ifstream fs("code.txt");/打开含01码的文本 ofstream fp("decode.txt");/创建并打开一文本,用于存储解码后的内容 while(fs.get(c) *(pstr+i)=c;i+;k=0;while(k<n) k+; if(strcmp(pstr,HCk )=0) t=wk.index; ch=char(t);/cout<<ch;fp.put(ch);*pstr=null;/清空*pstr中原有内容i=0; fs.close(); fp.close();指导教师评语: 成绩: 指导教师: 年 月 日-

    注意事项

    本文(数据结构课程设计-实例.doc)为本站会员(豆****)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开