欢迎来到天天文库
浏览记录
ID:61488322
大小:67.00 KB
页数:9页
时间:2021-02-05
《哈弗曼编码实验报告.doc》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、华北科技学院计算机系综合性实验实验报告课程名称数据结构实验学期2010至2011学年第2学期学生所在系部管理系年级2009级专业班级电商B092学生姓名刘伟学号1任课教师兰芸实验成绩计算机系制《数据结构B》课程综合性实验报告开课实验室:基础六年月日实验题目哈夫曼编码的实现一、实验目的1、掌握线性链表的插入、删除等算法。3、掌握Huffman树的概念及构造方法。4、掌握二叉树的存储结构及遍历算法。5、构造Huffman树及Huffman编码二、设备与环境微型计算机、Windows系列操作系统、Visua
2、lC++6.0软件三、实验内容根据字符出现的频率情况,创建Haffman树,再将各字符对应的哈夫曼编码显示在屏幕上四、实验结果及分析实验过程(图):赫夫曼编码树seletemintwovalGenbinoryTree子函数子函数HuffmanTree生成赫夫曼树输出权值输出赫夫曼编码及实现了译码功能测试截图:代码分析:#include#include#defineMIN50;typedefstructHnode{charval;intleft;intright;i
3、ntparent;intweight;intside;intvisted;}Hnode;HnodeH[60];intindex[2];voidseletemintwoval(intn)//选两个最小值{inti,j,min;for(j=0;j<2;j++){min=MIN;for(i=0;i4、ryTree(intn)//用选出的两个结点构成二叉树{H[n].left=index[0];H[n].right=index[1];H[n].weight=H[index[0]].weight+H[index[1]].weight;H[index[0]].parent=n;H[index[0]].side=0;H[index[1]].parent=n;H[index[1]].side=1;n++;return(n);}intHuffmanTree(ints)//生成哈夫曼树{intn=s;intco5、unt=s;while(count>1){seletemintwoval(n);n=GenbinoryTree(n);count--;}returnn;}voidOutputHcoding(chardoc[],intw,intk,intn)//输出编码{inti,j[20],p,q,t=0;intc[20][20];for(i=0;i6、ile(H[p].parent!=-1)//从叶子节点开始检查,用数组代替栈{c[t][j[t]]=H[p].side;j[t]++;p=H[p].parent;}for(q=j[t]-1;q>=0;q--)//将数组从后往前输出以实现栈的功能printf("%d",c[t][q]);printf("");t++;}}printf("所输入字母序列的编码为:");for(i=0;i7、1;q>=0;q--)printf("%d",c[p][q]);}}}printf("");}voidTranslate(intn)//译码{inti,x,y,N=0;chara[30];intb[30];printf("请输入'0'、'1'编码序列用于译码:");gets(a);while(a[N]!=' '){b[N]=(int)a[N]%2;N++;}for(i=0;i8、);for(i=0;i
4、ryTree(intn)//用选出的两个结点构成二叉树{H[n].left=index[0];H[n].right=index[1];H[n].weight=H[index[0]].weight+H[index[1]].weight;H[index[0]].parent=n;H[index[0]].side=0;H[index[1]].parent=n;H[index[1]].side=1;n++;return(n);}intHuffmanTree(ints)//生成哈夫曼树{intn=s;intco
5、unt=s;while(count>1){seletemintwoval(n);n=GenbinoryTree(n);count--;}returnn;}voidOutputHcoding(chardoc[],intw,intk,intn)//输出编码{inti,j[20],p,q,t=0;intc[20][20];for(i=0;i6、ile(H[p].parent!=-1)//从叶子节点开始检查,用数组代替栈{c[t][j[t]]=H[p].side;j[t]++;p=H[p].parent;}for(q=j[t]-1;q>=0;q--)//将数组从后往前输出以实现栈的功能printf("%d",c[t][q]);printf("");t++;}}printf("所输入字母序列的编码为:");for(i=0;i7、1;q>=0;q--)printf("%d",c[p][q]);}}}printf("");}voidTranslate(intn)//译码{inti,x,y,N=0;chara[30];intb[30];printf("请输入'0'、'1'编码序列用于译码:");gets(a);while(a[N]!=' '){b[N]=(int)a[N]%2;N++;}for(i=0;i8、);for(i=0;i
6、ile(H[p].parent!=-1)//从叶子节点开始检查,用数组代替栈{c[t][j[t]]=H[p].side;j[t]++;p=H[p].parent;}for(q=j[t]-1;q>=0;q--)//将数组从后往前输出以实现栈的功能printf("%d",c[t][q]);printf("");t++;}}printf("所输入字母序列的编码为:");for(i=0;i7、1;q>=0;q--)printf("%d",c[p][q]);}}}printf("");}voidTranslate(intn)//译码{inti,x,y,N=0;chara[30];intb[30];printf("请输入'0'、'1'编码序列用于译码:");gets(a);while(a[N]!=' '){b[N]=(int)a[N]%2;N++;}for(i=0;i8、);for(i=0;i
7、1;q>=0;q--)printf("%d",c[p][q]);}}}printf("");}voidTranslate(intn)//译码{inti,x,y,N=0;chara[30];intb[30];printf("请输入'0'、'1'编码序列用于译码:");gets(a);while(a[N]!=' '){b[N]=(int)a[N]%2;N++;}for(i=0;i8、);for(i=0;i
8、);for(i=0;i
此文档下载收益归作者所有