早教吧作业答案频道 -->其他-->
1、二叉树的应用-哈夫曼树(电文的编码和译码)哈夫曼编码/译码器问题描述:设计一个哈夫曼编码/译码系统,对字符串进行编码/译码基本要求:(1)从键盘输入字符串,以回车结束
题目详情
1、二叉树的应用-哈夫曼树(电文的编码和译码)
哈夫曼编码/译码器
问题描述:设计一个哈夫曼编码/译码系统,对字符串进行编码/译码
基本要求:
(1)从键盘输入字符串,以回车结束;
(2)根据字符串中字符出现的概率进行哈夫曼编码;)
(3)并输出编码结果和编码表;
(4)根据编码结果和编码表还原字符串;
(5)输出编码过程中构造的哈夫曼树。
哈夫曼编码/译码器
问题描述:设计一个哈夫曼编码/译码系统,对字符串进行编码/译码
基本要求:
(1)从键盘输入字符串,以回车结束;
(2)根据字符串中字符出现的概率进行哈夫曼编码;)
(3)并输出编码结果和编码表;
(4)根据编码结果和编码表还原字符串;
(5)输出编码过程中构造的哈夫曼树。
▼优质解答
答案和解析
#include
#include
int n;
int m=2*n-1;
struct tree
{
float weight;
int parent;
int lch,rch;
};
struct codetype
{
int bits[100];
int start;
char ch;
};
tree hftree[100];
codetype code[99];
void creathuffmantree(int n,int m)
{
int i,j ,p1,p2;
float s1,s2;
for(i=1;i<=m;i++)
{hftree[i].parent=0;
hftree[i].lch=0;
hftree[i].rch=0;
hftree[i].weight=0;
}
cout<for(i=1;i<=n;i++)
cin>>hftree[i].weight;
for(i=n+1;i<=m;i++)
{ p1=p2=0;
s1=s2=32767;
for(j=1;j<=i-1;j++)
if (hftree[j].parent==0)
if (hftree[j].weight {s2=s1;s1=hftree[j].weight;
p2=p1;p1=j;
}
else
if (hftree[j].weight {s2=hftree[j].weight;p2=j;
}
hftree[p1].parent=i;
hftree[p2].parent=i;
hftree[i].lch=p1;
hftree[i].rch=p2;
hftree[i].weight=hftree[p1].weight+hftree[p2].weight;
}
}
void huffcode(int n,int m)
{
codetype cd;
int c,p;
for(int i=1;i<=n;i++)
{
cd.start=n+1;
cd.ch=96+i;
c=i;
p=hftree[i].parent;
while(p!=0)
{ cd.start--;
if(hftree[p].lch==c) cd.bits[cd.start]=0;
else cd.bits[cd.start]=1;
c=p;
p=hftree[p].parent;
}
code[i]=cd;
}
for(i=1;i<=n;i++)
{ cout< for(int j=code[i].start;j<=n;j++)
cout< }
}
void trancode(int n,int m)
{
int i=m;char b;
cout< cin>>b;
while ((b=='0')||(b=='1'))
{ if (b=='0') i=hftree[i].lch;
else i=hftree[i].rch;
if (hftree[i].lch==0)
{ cout<
}
cin>>b;
}
}
void main()
{
cout< cin>>n;
creathuffmantree(int (n),int (m));
huffcode(int (n),int (m));
trancode(int (n),int (m));
}
#include
int n;
int m=2*n-1;
struct tree
{
float weight;
int parent;
int lch,rch;
};
struct codetype
{
int bits[100];
int start;
char ch;
};
tree hftree[100];
codetype code[99];
void creathuffmantree(int n,int m)
{
int i,j ,p1,p2;
float s1,s2;
for(i=1;i<=m;i++)
{hftree[i].parent=0;
hftree[i].lch=0;
hftree[i].rch=0;
hftree[i].weight=0;
}
cout<for(i=1;i<=n;i++)
cin>>hftree[i].weight;
for(i=n+1;i<=m;i++)
{ p1=p2=0;
s1=s2=32767;
for(j=1;j<=i-1;j++)
if (hftree[j].parent==0)
if (hftree[j].weight
p2=p1;p1=j;
}
else
if (hftree[j].weight
}
hftree[p1].parent=i;
hftree[p2].parent=i;
hftree[i].lch=p1;
hftree[i].rch=p2;
hftree[i].weight=hftree[p1].weight+hftree[p2].weight;
}
}
void huffcode(int n,int m)
{
codetype cd;
int c,p;
for(int i=1;i<=n;i++)
{
cd.start=n+1;
cd.ch=96+i;
c=i;
p=hftree[i].parent;
while(p!=0)
{ cd.start--;
if(hftree[p].lch==c) cd.bits[cd.start]=0;
else cd.bits[cd.start]=1;
c=p;
p=hftree[p].parent;
}
code[i]=cd;
}
for(i=1;i<=n;i++)
{ cout< for(int j=code[i].start;j<=n;j++)
cout<
cout<}
void trancode(int n,int m)
{
int i=m;char b;
cout< cin>>b;
while ((b=='0')||(b=='1'))
{ if (b=='0') i=hftree[i].lch;
else i=hftree[i].rch;
if (hftree[i].lch==0)
{ cout<
i=m;}
cin>>b;
}
}
void main()
{
cout< cin>>n;
creathuffmantree(int (n),int (m));
huffcode(int (n),int (m));
trancode(int (n),int (m));
}
看了1、二叉树的应用-哈夫曼树(电...的网友还看了以下:
我准备买一些明信片---中译英如何译? 2020-04-27 …
英语翻译个 像一个盒子 盒子的单位是个 个翻译成英文是什么?套 像一套光盘 “套”翻译成英文是什么 2020-05-15 …
关于胎盘描述错误的是()A.胎盘是胎儿和母体交换物质的器官B.胎盘绒毛内的毛细血管与母体的血管相通 2020-05-17 …
下面关于PC机键盘的述说中,错误的是______。A.目前普遍使用的键盘按键都是电容式键盘,属于无接 2020-05-23 …
下面关于PC机键盘的述说中,不正确的是______。A.台式PC机键盘的按键数目现已超过100个键, 2020-05-24 …
假设发现某微机的硬盘感染了病毒,现有 1张含有杀病毒软件的系统盘-软盘,在下面列出的不同操作方 2020-05-26 …
吐温-80(HLB=15.0)2g和司盘-80(HLB=4.3)3g混合后的HLB值为()A.9.6 2020-05-31 …
关于SAS硬盘与SATA硬盘描述正确的是() 2020-05-31 …
关于胎盘描述错误的是()A.胎盘是胎儿和母体交换物质的器官B.胎盘绒毛内的毛细血管与母体的血管相通 2020-06-25 …
材料:现在,随着社会的发展,越来越多的同学跟手机、MP3、光盘、快译通等高科技产品交上了朋友,有的还 2020-12-01 …