哈夫曼文件压缩实验报告.doc

哈夫曼文件压缩实验报告.doc

ID:48502397

大小:234.50 KB

页数:17页

时间:2020-02-05

哈夫曼文件压缩实验报告.doc_第1页
哈夫曼文件压缩实验报告.doc_第2页
哈夫曼文件压缩实验报告.doc_第3页
哈夫曼文件压缩实验报告.doc_第4页
哈夫曼文件压缩实验报告.doc_第5页
资源描述:

《哈夫曼文件压缩实验报告.doc》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、......数据结构实验报告三——哈夫曼文件压缩实验题目:哈夫曼文件压缩实验目标:输入一个有10k单词的英文文档。输出压缩后的二进制文件,并计算压缩比。数据结构:栈和哈夫曼树。1.定义栈()typedefstruct{char*elem;intstacksize;inttop;}STACK;2.定义哈夫曼树()typedefstruct{intweight;intleft,right;intparent;}HTNode;需要的操作有:1.初始化栈(Initstack)voidInitstack(STACK*

2、s){s->elem=(char*)malloc(sizeof(int)*1000);s->stacksize=1000;s->top=-1;.专业.专注.......}2.压栈(push)voidpush(STACK*s,inte){s->elem[++s->top]=e;}3.弹栈(pop)voidpop(STACK*s,int*e){if(s->top!=-1)*e=s->elem[s->top--];}4.构造哈夫曼树(Inithuffman)voidInithuffman(intwset[n],i

3、ntk,HuffTreeHT[]){//构造哈夫曼树inti,m;ints1,s2;m=k*2-1;for(i=0;iweight=(iparent=-1;HT[i]->left=HT[i]->right=-1;}for(i=k;i

4、);//在HT[1...i-1]中选择parent为0且weight为最小的两个结点,其下标分别为s1和s2HT[i]->left=s1;HT[i]->right=s2;HT[i]->weight=HT[s1]->weight+HT[s2]->weight;HT[s1]->parent=HT[s2]->parent=i;}}其中用到另一个基本操作:找到哈夫曼树中最小和次小的结点(select)5.找到哈夫曼树中最小和次小的结点(select)voidselect(HuffTreeHT[255],inta,i

5、nti,int*p,int*q){intj=0,k=0,*HT1,temp;HT1=(int*)malloc(sizeof(int)*(i-1));//存放权值for(j=0;jparent==-1){HT1[k]=HT[j]->weight;//把没有parent的结点的权值放在HT1中k++;}//printf("%4d%4d%4d%4d%4d",HT[j]->parent,HT[j]->left,HT[j]->right,HT[j]->weight,HT1[k-

6、1]);}.专业.专注.......j=0;while(j<2){//找到权值最小和第二小的结点for(k=j;k<(i-(i-a)*2);k++){if(HT1[j]>HT1[k]){temp=HT1[k];HT1[k]=HT1[j];HT1[j]=temp;}}j++;}k=0;for(j=0;jparent==-1)if(HT[j]->weight==HT1[0]&&k<1){//将最小的权值赋到*p中*p=j;k++;}j++;}for(j=0;j

7、j]->parent==-1).专业.专注.......if(j!=*p)if(HT[j]->weight==HT1[1]&&k<2){//将第二小的权值赋到*q中*q=j;k++;}j++;//printf("%4d%4d%4d%4d",HT[i]->parent,HT[i]->left,HT[i]->right,HT[i]->weight);}}6.根据哈夫曼树得到各字符对应的哈夫曼编码(Huffman)voidHuffman(HuffTreeHT[2*n-1],intk,charstr[][20]

8、){inti,j,e,t1=0,t2=0;charc;STACKst;for(i=0;iright==-1&&HT[i]->left==-1){//找一个叶子结点Initstack(&st);HT[i]->right=HT[i]->left==-2;j=i;//记录其下标while(HT[j]->parent!=-1){if(HT[HT[j]->parent]->right==

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。