单链表的交并差 第2页

 for(i=1;i<len;i++)
       {
         if(d[i]==d[i+1])
          {
           printf("Don't allow the same data! Please reinput!");
           goto input;
          }
       }
    creat(&*L);
    for(i=1;i<=len;i++)
       {
         insert(&*L,i,d[i]);
       }
    printf("The data of the linktable is:  ");
    display(&*L);
   
}
/*复制链表L1到L2*/
void copy(struct Lnode **L1,struct Lnode **L2 )
{

  int i,len;
  ElemType t;
  len=lenth(&*L1);
  creat(&*L2);
    for(i=1;i<=len;i++)
       {
         t=get(&*L1,i);
         insert(&*L2,i,t);
       }
}
/*求交集*/
void intersection(struct Lnode **L1,struct Lnode **L2,struct Lnode **L3)
{   
     
     int i,j,k=1;
     struct Lnode *t1,*t2;
     t1=*L1;
     t2=*L2;
     creat(&*L3);
     for(i=1;i<=lenth(&*L1);i++)
      {
       for(j=1;j<=lenth(&*L2);j++)
        {
          if(t1->data==t2->data)
            {
              insert(&*L3,k,t1->data);
              k++;
            }
          t2=t2->next;
        }
      t1=t1->next;
      t2=*L2;
     }

}
/*求并集*/
unionset(struct Lnode **L1,struct Lnode **L2,struct Lnode **L3)
{/*把L1复制到L3,然后比较L2与L3,得到L2在L3中没有的元素在L3中的位置,并插入*/
  int i,j,k;
  struct Lnode *tt,*t2,*t3;
  creat(&*L3);
  copy(&*L1,&*L3);
  t2=*L2;
  t3=*L3;
  for(i=1;i<=lenth(&*L2);i++)
      {
       k=1;
       for(j=1;j<=lenth(&*L3);j++)
        {
          if(t2->data==t3->data)
           {
             k=0;
             break;
           }
          else if(t2->data<t3->data)
           {
             break;
           }
          else if(t2->data>t3->data)
           {
             k++;
             if(k<=lenth(&*L3))
             {
              t3=t3->next;
             }
           }
        }
       if(k>0&&k<=lenth(&*L3))
       {/*插在排序的位置上*/
         insert(&*L3,k,t2->data);
       }
       else if(k>lenth(&*L3))
       {/*插在链尾*/
         tt=(struct Lnode *)malloc(sizeof(struct Lnode));
         tt->data=t2->data;
         tt->next=null;
         t3->next=tt;
       }
       t2=t2->next;
       t3=*L3;
      }
}
/*求差集*/
void diffrenceset(struct Lnode **L1,struct Lnode **L2,struct Lnode **L3)
{
/*将第一个复制到第三个,查找第二个在第三个中有的元素,并确定它在第三个中的位置,然后从第三个中删除*/
  int i,t,n;
  creat(&*L3);
  copy(&*L1,&*L3);
  for(i=1;i<=lenth(&*L2);i++)
   {
     t=get(&*L2,i);
     n=locate(&*L3,t);
     if(n)
     {
      delete(&*L3,n);
     }
   }
}
main()
{
  int len1,len2;
  char r;
  static struct Lnode *head1,*head2,*head3,*head4,*head5,*head6;
  printf("/************************************************************************/\n");
  printf("Please input the lenth of the first linktable!  ");
  scanf("%d",&len1);
  printf("/************************************************************************/\n");
  printf("The lenth of the first linktable is %d,please input %d int data!  ",len1,len1);
  init(&head1,len1);
  printf("/************************************************************************/\n");

上一页  [1] [2] [3] 下一页

Copyright © 2007-2012 www.chuibin.com 六维论文网 版权所有