数据结构实验七

  • 格式:doc
  • 大小:427.00 KB
  • 文档页数:2

下载文档原格式

  / 2
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

}

for(i=n+1;i<=m;i++){

YLX_select(ht,i-1,&s1,&s2);

(*ht)[s1].parent=i;

(*ht)[s2].parent=i;

(*ht)[i].LChild=s1;

(*ht)[i].RChild=s2;

(*ht)[i].weight=(*ht)[s1].weight+(*ht )[s2].weight;

}

}

void YLX_outputHuffman(HuffmanTree HT, int m){

if(m!=0){

YLX_outputHuffman(HT,HT[m].LChild);

if(!HT[m].LChild&&!HT[m].RChild)print f("%c\t", HT[m].data);

YLX_outputHuffman(HT,HT[m].RChild);

}

}

void YLX_CrtHuffmanCode(HuffmanTree *ht, HuffmanCode *hc, int n){

char *cd;

int i;

unsigned int c;

int start;

int p;

hc=(HuffmanCode

*)malloc((n+1)*sizeof(char *));

cd=(char * )malloc(n * sizeof(char ));

cd[n-1]='\0';

for(i=1;i<=n;i++){

start=n-1;

for(c=i,p=(*ht)[i].parent;

p!=0; c=p,p=(*ht)[p].parent)

if( (*ht)[p].LChild == c)

cd[--start]='0';

else

cd[--start]='1';

hc[i]=(char

*)malloc((n-start)*sizeof(char));

strcpy(hc[i],&cd[start]);

}

free(cd);

for(i=1;i<=n;i++)

printf("%c编码为%s\n",(*ht)[i].data,hc[i]);

}

void main() {

HuffmanTree HT;

HuffmanCode HC;

int n;

int m;

printf("*******袁丽湘*******"); printf("\n");

printf("输入叶子节点的个数:" ); scanf("%d",&n);

YLX_CrtHuffmanTree(&HT,n);

m=2*n-1;printf("中序输出哈夫曼树叶子节点:\n");

YLX_outputHuffman(HT,m);

printf("\n");

YLX_CrtHuffmanCode(&HT,&HC,n);

}

六、运行结果截图

七、实验总结与体会

本次实验需要我们进一步掌握二叉树的存储结构和相应算法,掌握霍夫曼树的创建和霍夫曼编码。在本次实验中我觉得对于二叉树的延伸上存在着一些问题,比较难理解。