正文

设计程序以实现构造哈夫曼树的哈夫曼算法2006-11-13 09:52:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/hammers/20263.html

分享到:

//数据结构课程设计、//设计程序以实现构造哈夫曼树的哈夫曼算法。//要求:使用实验工具的有关功能;要能有演示过程;求解出所构造的哈夫曼//树的带权路径长度。 #include"btreint.h" int count=0;//数据的个数;bitre data[50];//存储数组 void delete_min()//获得最小元素、{ for(int i=1;i<=count-2;i++) data[i]=data[i+2];} int tree_insert(bitre t)//插入新的节点; {   if(t->data>=data[count]->data){data[++count]=t;return 0;} else{int m; for(int j=1;j<=count;j++) if(data[j]->data>=t->data){m=j;break;} for(int k=count;k>=m;k--) data[k+1]=data[k]; data[m]=t; count++;} } int num=0;get_long(bitre t)//求解huffman树的带权路径长度; { if(t!=NULL){ if(t->rchild!=NULL&&t->lchild!=NULL) { visite_bnode(t,1); num=num+t->data; get_long(t->lchild); get_long(t->rchild); }}}void main(){       cout<<endl<<endl<<endl<<endl;    cout<<"          ***************************************"<<endl;    cout<<"          *       Construct Huffman Tree        *"<<endl;    cout<<"          *       Name:     XuHua               *"<<endl;    cout<<"          *       Number:   20042297            *"<<endl;    cout<<"          ***************************************"<<endl<<endl<<endl<<endl;             bitre a,b,t;    //定义变量;  cout<<"please put in the data and in increased way and -9999 over "<<endl; for(int i=1;i<=50;i++)//输入数据;   { int adj; data[i]=(bitre)malloc(sizeof(struct bnode));//数据存储;   if(i==1){data[0]->data=0;} cin>>adj; if(adj==-9999){cout<<"put in over "<<endl;break;}//结束标志;  data[i]->data=adj;count++;    }  //数据元素,   //数据的存储;   for(int y=1;y<=count;y++)//整理存储的数据;   for(int x=count;x>y;x--)  if(data[x]->data<data[x-1]->data)  {      int shu=data[x]->data;      data[x]->data=data[x-1]->data;      data[x-1]->data=shu;  }     for(int j=1;j<=count;j++) {data[j]->lchild=NULL;data[j]->rchild=NULL;}//huffman树构造过程;  while(count>1) {  a=data[1];b=data[2];//得到最小的两个节点;  t=(bitre)malloc(sizeof(struct bnode)); t->lchild=a; t->rchild=b; t->data=a->data+b->data; delete_min(); count=count-2; tree_insert(t); display_bitre("tree",t);//显示此时的huffman树;  Wait();  } get_long(t); cout<<"WL="<<num<<endl;//输出带权路径长度;  Wait();}      

阅读(5794) | 评论(8)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

loading...
您需要登录后才能评论,请 登录 或者 注册