七:哈夫曼编码及应用_第1页
七:哈夫曼编码及应用_第2页
七:哈夫曼编码及应用_第3页
七:哈夫曼编码及应用_第4页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

-.z.**中医药大学医学信息工程学院实验报告课程名称:数据构造与算法专业班级:计算机科学与技术()级学生**:学生**:实验名称:实验成绩:课程类别:必修限选□公选□其它□哈夫曼编码及应用实验目的:了解哈夫曼树的应用,掌握哈夫曼树的构造方法及前缀码的应用。实验性质:设计性,应用性。实验步骤:输入一串字符,统计其中所有的不同字符及其个数,得出每个不同字符在文中出现的频率。根据每个字符频率建立哈夫曼树,输出字符对应的编码。[实验要求]实验要求独立完成。迟交或不交的或源代码雷同者一律不做作业登记评分。[作业提交](实验报告写在此处)给出含有6,8,11个字符的实例,统计他们的频率,画出哈夫曼树,并用算法验证结果。662424D1C11B2A21)1D1C11B2A21)1代码写在此处#include"stdio.h"#include<malloc.h>#defineMA*NODE20#defineMA*LEAF30#defineMA*INT234567structHtNode{ intww; intparent,lchild,rchild;};structHtTree{ introot; structHtNodeht[MA*NODE];};typedefstructHtTreePHtTree;PHtTree*huffman(intm,int*w);voidmain(){chars[MA*NODE];intm=0;charw[MA*NODE];intcount=0;intt=0;inta[MA*NODE];int*b;char*code; code=(char*)malloc(sizeof(char));b=(int*)malloc(sizeof(int));printf("请输入字符窜:\n");for(inti=0;i<MA*NODE;i++){ scanf("%c",&s[i]);++count; if(s[i]=='#') break;}for(i=0;i<count-1;i++){a[i]=0;b[m]=0; for(intj=0;j<count-1;j++) { if(s[i]==s[j]&&i<=j){ a[i]=a[i]+1; } if(s[i]==s[j]&&i>j){ a[i]=a[i]+1; s[i]=NULL; } } if(s[i]!=NULL){ b[m]=a[i]; w[m]=s[i]; m++; printf("%c的个数%d,频率为%f\n",w[m-1],b[m-1],(float)a[i]/(count-1)); }}PHtTree*pht;pht=(PHtTree*)malloc(sizeof(PHtTree));pht=huffman(m,b);for(i=0;i<2*m-1;i++){printf("%d",pht->ht[i].ww);}printf("\n");for(i=0;i<m;i++){intc;c=i;t=0;int p=pht->ht[i].parent; while(p!=-1) { if(pht->ht[p].lchild==c) {code[t]='0'; t++; } if(pht->ht[p].rchild==c) { code[t]='1'; t++; } pht->root--;c=p; p=pht->ht[p].parent; } printf("%c的编码是",w[i]); for(inty=t-1;y>=0;y--) printf("%c",code[y]); printf("\n");}}PHtTree*huffman(intm,int*w)//构造具有m各节点的哈弗曼树{PHtTree*pht;inti,j,*1,*2,m1,m2;pht=(PHtTree*)malloc(sizeof(PHtTree));if(pht==NULL){printf("outofspace!\n");returnpht;}for(i=0;i<2*m-1;i++){pht->ht[i].lchild=-1;pht->ht[i].rchild=-1;pht->ht[i].parent=-1; if(i<m) pht->ht[i].ww=w[i]; else pht->ht[i].ww=-1;}for(i=0;i<m-1;i++){ m1=MA*INT; m2=MA*INT; *1=-1; *2=-1; for(j=0;j<m+i;j++) if(pht->ht[j].ww<m1&&pht->ht[j].parent==-1) { m2=m1; *2=*1; m1=pht->ht[j].ww; *1=j; } elseif(pht->ht[j].ww<m2&&pht->ht[j].parent==-1) { m2=pht->ht[j].ww; *2=j; } pht->ht[*1].parent=m+i; pht->ht[*2].parent=m+i; pht->ht[m+i]

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论