求教这个程序测试时说断点异常
求教这个程序测试时说断点异常,哈夫曼编码的题问题描述描述:
写一个哈夫曼码的编/译码系统,要求能对要传输的报文进行编码和解码。构造哈夫曼树时,权值小的放左子树,权值大的放右子树,编码时右子树编码为1,左子树编码为0.
输入:
输入表示字符集大小为n(n <= 100)的正整数,以及n个字符和n个权值(正整数,值越大表示该字符出现的概率越大);
输入串长小于或等于100的目标报文。
输出:
经过编码后的二进制码,占一行;
以及对应解码后的报文,占一行;
最后输出一个回车符。
输入样例:
5 a b c d e 12 40 15 8 25
bbbaddeccbbb
输出样例:
00011111110111010110110000
bbbaddeccbbb
代码:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct Halv
{
char data;
int number;
int mima;
struct Halv *lchild;
struct Halv *rchild;
}Bit,*Node;
void solve(Node gen,int m,int n)
{
gen->mima=10*m+n;
if(gen->lchild!=NULL)
{
solve(gen->lchild,gen->mima,0);
}
if(gen->rchild!=NULL)
solve(gen->rchild,gen->mima,1);
}
void print(Node gen,char a)
{
int judge=0;
if(gen->data==a)
{
printf("%d",gen->mima);
judge=1;
}
if(gen->lchild!=NULL&&judge!=1)
print(gen->lchild,a);
if(gen->rchild!=NULL&&judge!=1)
print(gen->rchild,a);
}
int main()
{
char A[100];
int a,b,c,n,min1,min2;
Node group[100],p1;
scanf("%d",&n);
for(a=0;a<n;a++)
{
group[a]=(Node)malloc(sizeof(Bit));
}
for(a=0;a<n;a++)
{
scanf(" %c",&group[a]->data);
}
for(a=0;a<n;a++)
{
scanf("%d",&group[a]->number);
group[a]->lchild=NULL;
group[a]->rchild=NULL;
}
for(a=0;a<n-1;a++)
{
for(b=0,c=10000;b<n;b++)
{
if(group[b]->number<c)
{
min1=b;
c=group[b]->number;
}
}
for(b=0,c=10000;b<n;b++)
{
if(group[b]->number<c&&group[b]->number>group[min1]->number)
{
min2=b;
c=group[b]->number;
}
}
p1=(Node)malloc(sizeof(Bit));
{
p1->lchild=group[min1];
p1->rchild=group[min2];
p1->number=group[min1]->number+group[min2]->number;
p1->data='~';
}
group[min1]=p1;
group[min2]->number=10000;
}
solve(p1,0,0);
scanf("%s",A);
b=strlen(A);
printf("%d\n",b);
for(a=0;a<b;a++)
{
print(p1,A[a]);
}
printf("\n");
puts(A);
return 0;
}
[此贴子已经被作者于2016-5-4 22:38编辑过]