📄 sl.cpp
字号:
# include <iostream.h>
# define n 4
# define m 2*n-1
# define M 100
typedef struct TreeNode
{
int wi;
char data;
int parent,Lchild,Rchild;
}HTNode;
typedef struct code
{
int string[n];
int num;
char data;
}HuffmanCode;
void select(HTNode HT[m+1])
{
int i,j,s1,s2,x1,x2;
for(i=n+1;i<=m;i++)
{
x1=x2=0;
s1=s2=M;
for(j=1;j<=i-1;j++)
{
if(HT[j].parent==0)
{
if(HT[j].wi<s1)
{
s2 = s1;
s1 = HT[j].wi;
x2 = x1;
x1 = j;
}
else if(HT[j].wi<s2)
{
s2 = HT[j].wi;
x2=j;
}
}
}
HT[x1].parent = HT[x2].parent = i;
HT[i].Lchild = x1;
HT[i].Rchild = x2;
HT[i].wi = HT[x1].wi + HT[x2].wi;
}
}
void main(void)
{
int i,j,p,s;
HuffmanCode CD;
HuffmanCode code[n+1];
HTNode HT[m+1];
for(i=1;i<=m;i++)
{
HT[i].wi=HT[i].parent=HT[i].Lchild=HT[i].Rchild=0;
}
cout<<"代码有4个"<<endl;
for(i=1;i<=n;i++)
{
cout<<"请输入第"<<i<<"个字符:\t";
cin>>HT[i].data;
cout<<"请输入该字符的权值:\t";
cin>>HT[i].wi;
cout<<"\n";
}
cout<<endl;
select(HT);
for(i=1;i<=n;i++)
{
code[i].data = HT[i].data;
}
cout<<"哈夫曼编码"<<endl;
for(i=1;i<=n;i++)
{
CD.data = code[i].data;
CD.num = 0;
s = i;
p = HT[i].parent;
while(p!=0)
{
CD.num++;
if(HT[p].Lchild == s)
CD.string[CD.num] =0;
else
CD.string[CD.num] =1;
s = p;
p = HT[p].parent;
}
code[i] = CD;
cout<<code[i].data<<"\t\t";
for(j=1;j<=CD.num;j++)
{
cout<<code[i].string[j];
}
cout<<endl;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -