- 6
- 0
- 约7.25千字
- 约 9页
- 2020-09-09 发布于浙江
- 举报
#includeiostream
#includestring
#includefstream
using namespace std;
#define Max 200 //最大结点数目
#define INT 10000
char ch[Max]; //叶子结点信息(字符)
int i,w[Max]; //w为输入的权值数组
typedef struct{
?unsigned int weight; //权值
?unsigned int parent,lchild,rchild;
}HTNode,*HuffmanTree; //动态分配数组存储赫夫曼树
typedef char * *HuffmanCode; //动态分配数组存储赫夫曼编码表
void HuffmanCoding(HuffmanTree HT,HuffmanCode HC,int *w,int n)
{//w存放n个字符的权值(均0),构造赫夫曼树HT,并求出n个字符的赫夫曼编码HC。
?int s1,s2,j,min1,min2;
?if(n=1)? return;
?int m=2*n-1;
?HT=new HTNode[m+1];//0号单元未用
?for(i=1;i=n;++i) //赫夫曼树叶子结点的初始化
?{
??HT[i].weight=w[i];? HT[i].parent=0;
??HT[i].lchild=0;???? HT[i].rchild=0;
??}
?for(i=n+1;i=m;++i) //非叶子结点的初始化
?{
??? HT[i].weight=0;?? HT[i].parent=0;
??? HT[i].lchild=0;?? HT[i].rchild=0;
?}
?for(i=n+1;i=m;++i) //建赫夫曼树
?{ //在HT[1..i-1]选择parent为0且weight最小的两个结点,其序号分别为S1和S2
??min1=min2=INT;
??for(j=1;ji;j++)
???if(HT[j].parent==0(HT[j].weightmin1))
???{?? min1=HT[j].weight;? s1=j;? }
????? for(j=1;ji;j++)
????? if(HT[j].parent==0(HT[j].weightmin2)j!=s1)
?? {?? min2=HT[j].weight;? s2=j;?? }
????????? HT[s1].parent=i; HT[s2].parent=i;
??? HT[i].lchild=s1;HT[i].rchild=s2;
?????? HT[i].weight=HT[s1].weight+HT[s2].weight;
??? ch[i]=?;//非叶子结点的结点字符
?}
?//从叶子到根逆向求每个字符的赫夫曼编码
?HC=new char*[n+1]; //分配n个字符编码的头指针向量
?char *cd=new char[n]; //分配求编码的工作空间
?HT[i].lchild=s1; HT[i].rchild=s2;
?cd[n-1]=\0;? //编码结束符
?for(i=1;i=n;i++)? //逐个字符求赫夫曼编码
?{
??int c,f,start=n-1;//编码结束符位置
??for(c=i,f=HT[i].parent;f!=0;c=f,f=HT[f].parent) //从叶子到根逆向求编码
???if(HT[f].lchild==c)?
????cd[--start]=0;
???else
????cd[--start]=1;
???HC[i]=new char[n-start];//为第i个字符编码分配空间
???strcpy(HC[i],cd[start]); //从cd复制编码(串)到HC
?}
???? delete cd;
}
void Initialization(HuffmanTree HT,HuffmanCode HC,int n)//初始化,注意加引用符号
{
? char c;
???? ifstream fin(hfmTree.txt,ios::in);//读出?
???? if(fin.fail()) //若不存在此文件,则从终端读入
? {
???????? cout请输入字符个数n:;
?? cinn;
?? cout请输入字符及相应权值:endl;
?? for(i=1;i=n;i++)//注意点
?? {?
??? //getchar()是在输入缓冲区顺序读入一个字符(包括空格、回车和tab)。
???????????? getchar(); //取消换行符
??
您可能关注的文档
最近下载
- 2025年版维医医师资格考试大纲.docx VIP
- 常用汉字表(2500字).pdf VIP
- 高中英语2025届高考热点环保主题作文素材(词汇+模板).doc VIP
- 2026年春季统编版(部编版)2024新教材二年级下册道德与法治教学计划、教学设计及教学反思(附目录).docx
- 高中英语2025届高考热点青少年心理健康主题作文固定搭配短语汇总.doc VIP
- (2025春)部编版一年级下册道德与法治全册教案 (新版本).docx
- 国家电网招聘考试综合能力(判断推理)模拟试卷2.docx VIP
- 运动损伤与康复-全套PPT课件.pptx
- 凌文铨组织承诺问卷.doc VIP
- 医美整形现场咨询绝对成交技巧话术.docx VIP
原创力文档

文档评论(0)