本人是一名学生,在写哈夫曼编码的作业时,代码没有语法问题,但在运行时(ctrl+f5)动态分配空间语句不能执行
但在调试时就可以执行并输出哈夫曼编码
请问这是什么原因
ps:********1等语句是我判断语句是否执行的提示。
啥问题 没明白
#include<stdlib.h>
#include<stdio.h>
#include<string.h>
typedef struct
{
int weight;
int parent;
int lchild;
int rchild;
}HTNode,*HuffmanTree;
typedef char **HuffmanCode;
HuffmanTree HT;HuffmanCode HC;
void Select(HuffmanTree HT,int m,int *s1,int *s2)
{
int i;
int min1=1000,min2=1000;
for(i=1;i<=m;i++)
{
if(HT[i].parent==0&&min1>HT[i].weight)
{
min1=HT[i].weight;*s1=i;
}
}
for(i=1;i<=m;i++)
{
if(i!=(*s1)&&HT[i].parent==0)
if(HT[i].weight<min2)
{
min2=HT[i].weight;
*s2=i;
}
}
}
void CreateHuffmanTree(HuffmanTree *HT,int n)
{
if(n<=1) return;
int i;int s1,s2;
*(HT)=(HTNode*)malloc(2*n*sizeof(HTNode));
for(i=0;i<=2*n;i++)
{
(*HT)[i].lchild=0;(*HT)[i].parent=0;(*HT)[i].rchild=0;
}
printf("请输入结点的权重:");
for(i=1;i<=n;i++)
scanf("%d",&(*HT)[i].weight);
for(i=n+1;i<2*n;i++)
{
Select(*HT,i-1,&s1,&s2);
(*HT)[i].weight=(*HT)[s1].weight+(*HT)[s2].weight;
(*HT)[s1].parent=i;(*HT)[s2].parent=i;
(*HT)[i].lchild=s1;(*HT)[i].rchild=s2;
}
}
void CreateHuffmanCode(HuffmanTree HT,HuffmanCode &HC,int n)
{
int i,c,f;
int start;
char *cd = new char[n];
HC=new char*[n+1];
cd[n-1]='\0';
for(i=1;i<n+1;i++)
{
start=n-1;
c=i;f=HT[i].parent;
while(f!=0)
{
--start;
if(HT[f].lchild==c)
cd[start]='0';
else
cd[start]='1';
c=f;f=HT[f].parent;
}
HC[i]=new char[n-start];
strcpy(HC[i],&cd[start]);
}
delete cd;
}
void main()
{
int n,i;
printf("******哈夫曼编码的创建******\n请输入你想要输入的结点个数:");
scanf("%d",&n);
CreateHuffmanTree(&HT,n);
CreateHuffmanCode(HT,HC,n);
printf("\n\n");
printf("权值\t编码\n");
for(i=1;i<n+1;i++)
printf("%d\t%s\n",HT[i].weight,HC[i]);
system("pause");
}
您好,我是有问必答小助手,您的问题已经有小伙伴解答了,您看下是否解决,可以追评进行沟通哦~
如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~
ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632
也许对你有帮助:https://blog.csdn.net/it_xiangqiang/category_10768339.html
非常感谢您使用有问必答服务,为了后续更快速的帮您解决问题,现诚邀您参与有问必答体验反馈。您的建议将会运用到我们的产品优化中,希望能得到您的支持与协助!
速戳参与调研>>>https://t.csdnimg.cn/Kf0y