数据结构课程设计-实例(共11页).doc





《数据结构课程设计-实例(共11页).doc》由会员分享,可在线阅读,更多相关《数据结构课程设计-实例(共11页).doc(11页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、精选优质文档-倾情为你奉上数据结构课 程 设 计 报 告 书题目:赫 夫 曼 编 码 系别:计算机科学与应用 学号: 学生姓名: 牛 志 远 指导教师: 王亚楠 完成日期:2007年2月1日 一需要分析赫夫曼编码自己找一篇不少于100个单词的英文文章,分析该文章中每一个字符的出现概率(包括标点符号,区分大小写),根据分析结果对文章中每一个字符进行赫夫曼编码,并将编码原则存储于一个独立的文本文件中。最后,根据这个编码原则,将英文文章转换为01串存储于一个文本文件中。如:英文文章为aaabbc则编码规则为a-0 b-10c-11英文文章将被转化为 有能力的同学应该再编写一个解码程序,这个就不统一要
2、求。二 概要设计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()执
3、行。三 详细设计#include#include#include#define MAX_NUM #include typedef struct int index;/用于记录字符的ASCII码int frequent;/用于记录字符出现的次数 tongji;/该结构体用于对统计文章中字符出现的次数,及该字符对应的整数值(用于字符与编码的转换)typedef struct unsigned int weight; unsigned int parent,lchild,rchild;HTNode,*HuffmanTree;/动态分配数组存储赫夫曼树typedef char *HuffmanCode
4、;/动态分配数组存储赫夫曼编码表/Select()函数,用于选择两个weight最小的结点void Select(HuffmanTree HT,int end,int *s1,int *s2)/coutendendl; int i; int min1=MAX_NUM; int min2; for (i=1;i=end;i+) if (HTi.parent=0&HTi.weightmin1) *s1=i; min1=HTi.weight; min2=MAX_NUM; for(i=1;i=end;i+) if(HTi.parent=0&(*s1!=i)&HTi.weight0),构造赫夫曼树HT,
5、并求出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;ifrequent;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)
6、/在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
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 课程设计 实例 11

限制150内