班级网页设计专周报告.doc
《班级网页设计专周报告.doc》由会员分享,可在线阅读,更多相关《班级网页设计专周报告.doc(15页珍藏版)》请在沃文网上搜索。
1、成都电子机械高等专科学校专周报告课程名称数据结构设计题目哈夫曼树编码与译码班级10531学号02姓名宋美指导老师杨勇完成时间2011-5-30至2011-6-3 成都电子机械高等专科学校计算机工程系第 1 页 共 5 页目 录1. 专周题目与要求1专周要求.1编程要点.12. 设计与实现1内容包括.1设计思路.2关键技术和解决方案.23. 专周小结10设计结果.10问题分析.10心得体会.10不足之处.104. 参考文献11第 12 页报告正文注:以下所列内容报告中都应包括,可以根据实际情况扩充。二级及以上标题自己设计,标题最多列至4级1. 专周题目与要求专周题目:哈夫曼编码与译码专周要求:1
2、.由用户输入一段文章或从文件中读入(英文),计算机自动统计出文章中各单词出现的频率,以此为依据对该文章进行哈夫曼编码(即频率为权值)。2.对编码后的文章要输出到指定的文件,文件的开始位置给出编码表。第二行开始为编码的正文。3.对给定的编码文章进行译码,把译码后的结果显示出来,或输出到文本文件。编程要点:1).有序表的建立与操作,二叉树森林是一有序表的形式存储的。2).哈夫曼编码,见教材相关部分。3) 哈夫曼译码,把编码表提取出来创建一棵编码二叉树。2. 设计与实现内容包括:输入一篇英文文章,统计该文章中每个单词出现的次数,然后以它们作为权值,对每一个单词进行编码,编码完成后再对其编码进行译码,
3、提取创建一棵编码二叉树并以有序表的形式存储。1. 从键盘输入一段英语文章;2. 统计这篇文章中的每个单词出现的次数;3. 以单词出现次数作为权值,构建哈夫曼树,并创建一棵编码二叉树以二叉树的形式存储;4. 对每个单词进行编码并将编码进行破译。设计思路:1、创建一个工程Win32 Console Application,将函数体得实现存放于一个.c文件中,再创建一个.h文件用于存放所用的函数体以及一个总函数.c。 2、首先建立一个有序表,用于存放编码后的二叉树。 3、然后,将用户输入的英文文章的每个单词的频率计算出来作为权值。 4、编写哈夫曼树的初始化,建立,以及编码和译码。关键技术和解决方案(
4、关键代码,关键算法)1.OrderList.cinclude OrderList.h#include #include#include/*初始化有序表*/void InitiList(OrderList* list)list-ListLen = 0;list-Compare = NULL;list-Vist = NULL;/=/*添加一个元素*/int AddElement(OrderList* list, void* e)int j;if(list-ListLen=MAXSIZE)printf(表已满n);return 0 ;if(list-ListLen=0)list-data0=e;el
5、sefor(j=list-ListLen;j0;j-)int n;n=compareInt(list-dataj-1,e);if(ndataj=list-dataj-1;if(j-1=0)list-data0=e;if(n0)list-dataj=e;break;+list-ListLen;return 1;/=/*遍历有序表*/void Tranverse(OrderList* list)int i;if (!list-Vist) printf(请先设置Vist回调函数n);return;printf(各元素的权重:);for (i = 0; i ListLen; i+)list-Vist(
6、list-datai);printf(n);void strtolower(char *str)for (;*str;str+)if(*strZ) continue;*str+=0x20;/=/int Frequncy() /计算单词频率char wd20;int num=0;int i; char ch;while(1) scanf(%s,wd); /输入单词 /strtolower(wd); /把大写字母转化为小写 for(i=0;inum;i+) if(strcmp(wd,wci.word)=0) wci.count+; break; if(i=num) num+; strcpy(wcn
7、um-1.word,wd); wcnum-1.count=1; ch=getc(stdin); if(ch=10 | ch=13) /13表示回车的ASCMAbreak; return num;/=/*初始化Huffman树*/void InitiHuffman(HuffmanNode *ht,int n)int i;for(i=0;i2*n-1;i+) /n个叶子结点的Huffman树有n-1个结点hti.weight=0; / 初始值为hti.parent=0;hti.flag=0;hti.lchild=-1;hti.rchild=-1; /=/*构造Huffman树*/void Crea
8、tHuffman(HuffmanNode *ht,int n)int i,j,m1,m2,x1,x2; for(i=0;i2*n-1;i+) /n个叶子结点的Huffman树有n-1个结点hti.weight=0; / 初始值为hti.parent=0;hti.flag=0;hti.lchild=-1;hti.rchild=-1; for(i=0;in;i+)hti.weight=wci.count;for(i=0;in-1;i+) /构造Huffman树,每次循环构造一颗二叉树 m1=m2=1000; /设定初值,用于求最小权重结点x1=x2=0; /x1和x2是最小权重的两个结点的位置fo
9、r(j=0;jn+i;j+) /每次找出权重最小的两个结点if(htj.flag=0&htj.weightm1)m2=m1;x2=x1;m1=htj.weight;x1=j;else if(htj.weightm2&htj.flag=0)m2=htj.weight;x2=j;htx1.parent=n+i; /给双亲结点编号htx2.parent=n+i;htx1.flag=1;htx2.flag=1;htn+i.weight=htx1.weight+htx2.weight; /双亲结点的权重htn+i.lchild=x1; /左孩子为X1htn+i.rchild=x2;/右孩子为X2/=/*
10、根据Huffman求编码*/void Huffman(HuffmanNode *ht,HuffmanCode *hcd,HuffmanCode d,int n)int i,j,c,p;for (i=0;in;i+) /根据Huffman求编码d.start=n;c=i;p=htc.parent;while(p!=0) /由叶子结点向上直到根结点if(htp.lchild=c)d.cdd.start=0; /左孩子编码为elsed.cdd.start=1; /右孩子编码为d.start=d.start-1;c=p; p=htp.parent; d.start+;for( j=d.start;j=
- 1.请仔细阅读文档,确保文档完整性,对于不预览、不比对内容而直接下载带来的问题本站不予受理。
- 2.下载的文档,不会出现我们的网址水印。
- 3、该文档所得收入(下载+内容+预览)归上传者、原创作者;如果您是本文档原作者,请点此认领!既往收益都归您。
下载文档到电脑,查找使用更方便
10 积分
下载 | 加入VIP,下载更划算! |
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 班级 网页 设计 周报
