霍夫曼树问题,求解答
#include "stdio.h"#include "stdlib.h"
typedef struct Node
{ char data;
int w;
struct Node *lchild,*rchild,*parent;
}Node;
int n;
Node *p,*q;
int a[1000],top,base=0;
void init()
{top=base=0;
}
int empty( )
{if (top==base)
return 1;
else
return 0;
}
int full()
{ if(top==1000)
return 1;
else
return 0;
}
void push(int x)
{ if(!full())
{a[top]=x;
top++;
}
}
void pop()
{ if(!empty())
top--;
}
int get()
{ if(!empty())
return a[top-1];
else
return -1;
}
void input() //输入N个结点
{int i;
printf("请输入需要编码的结点的个数:");
scanf("%d",&n);
fflush(stdin);
p=(Node*)malloc((2*n)*sizeof(Node)); //p+0不要
for(i=1;i<=n;i++)//构建待编码的N个零散结点
{ printf("请输入第%d个需要编码的结点的字符和权重,以逗号隔开:",i);
scanf("%c,%d",&(p+i)->data,&(p+i)->w);
fflush(stdin);
(p+i)->rchild=(p+i)->lchild=(p+i)->parent=NULL;
}
for(i=n+1;i<=n*2-1;i++)//构建树需要补充的N-1个结点
{
(p+i)->data=' ';
(p+i)->w=1000;
(p+i)->rchild=(p+i)->lchild=(p+i)->parent=NULL;
}
}
int minw()//求最小的权的结点
{
int i,f=0;
int m=10000;
for(i=1;i<=n*2-1;i++)
{
if((p+i)->parent==NULL && (p+i)->w<m)
{ m=(p+i)->w;
f=i;
}
}
return f;
}
void createtree() //创建赫夫曼树
{int k,f1=0,f2=0,j;
k=1;
while(k<=n-1)
{ j=n+k;
f1=minw();
(p+f1)->parent=(p+j);
f2=minw();
(p+f2)->parent=(p+j);
(p+j)->w=(p+f1)->w+(p+f2)->w;
(p+j)->lchild=(p+f1);
(p+j)->rchild=(p+f2);
k++;
}
}
void output() //输出编码
{
int i;
for(i=1;i<=n;i++)
{
printf("%c %d:",(p+i)->data,(p+i)->w);
q=(p+i);
while(q->parent!=NULL)
{
if (q->parent->lchild==q)
push(0);
else
push(1);
q=q->parent;
}
while(!empty())
{
printf("%d",get());
pop();
}
printf("\n");
}
}
main()
{init();
input();
createtree();
output();
请问这段代码是什么意思:
int a[1000],top,base=0;
void init()
{top=base=0;
}
int empty( )
{if (top==base)
return 1;
else
return 0;
}
还有这句: (p+i)->data=' '中的空格什么意思?;
int minw()//求最小的权的结点
{
int i,f=0;
int m=10000;
for(i=1;i<=n*2-1;i++)
{
if((p+i)->parent==NULL && (p+i)->w<m)
{ m=(p+i)->w;
f=i;
}这没看懂,m为什么要设为10000?拜托大神帮我解答下吧,谢谢