|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
- #include <stdio.h>
- #include <stdlib.h>
- #define n 6
- #define m 2*n-1
- typedef struct
- {
- int weight;
- int lchild,rchild,parent;
- }HNode,*Huffmantree;
- void inittree(Huffmantree *T)
- {
- *T=(Huffmantree)(sizeof(HNode)*m); //用顺序存储结构来储存每一个结点
- if(!(*T))
- {
- printf("内存分配失败。\n");
- }
- else
- {
- printf("初始化成功");
- }
- }
-
- void selectmin(Huffmantree T,int k,int p1,int p2)
- {
- int i;
- int small1=10000,small2=10000;
- for(i=0;i<k;i++)
- {
- if(T[i].parent=-1)
- if(T[i].weight<small1)
- {
- small2=small1;
- small1=T[i].weight;
- p2=p2;
- p1=i;
- }
- else
- {
- if(T[i].weight<small2)
- {
- small2=T[i].weight;
- p2=i;
- }
- }
- }
- }
- void creathuffmantree(Huffmantree *T)
- {
- int i,p1,p2;
- for(i=0;i<m;i++) //初始化m个结点
- {
- T[i]->weight=0;
- T[i]->parent=-1;
- T[i]->lchild=-1;
- T[i]->rchild=-1;
- }
- for(i=0;i<n;i++) //输入n个叶子结点的权重
- {
- printf("请输入第%d个权重:",i+1);
- scanf("%d",&T[i]->weight);
- }
- for(i=n;i<m;i++)
- {
- selectmin(T,i-1,p1,p2);
- T[p1]->parent=i;
- T[p2]->parent=i;
- T[i]->lchild=p1;
- T[i]->rchild=p2;
- T[i]->weight=T[p1]->weight+T[p2]->weight;
- }
- }
- int main()
- {
- Huffmantree T;
- printf("请创建一棵哈弗曼树:");
- inittree(&T);
- creathuffmantree(&T);
- return 0;
- }
复制代码
@人造人
|
-
-
|