汇编写的(交集,并集,差集)

来源:互联网 发布:京东域名 编辑:程序博客网 时间:2024/05/16 14:53

//数据结构课程设计、
//设计程序以实现构造哈夫曼树的哈夫曼算法。
//要求:使用实验工具的有关功能;要能有演示过程;求解出所构造的哈夫曼
//树的带权路径长度。

#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();
}