线性表的顺序表示和实现2(联合)

 1 # include "test.h"
  2 void equal(ElemType, ElemType);
  3 void Union(SqList * La, SqList * Lb)
  4 {   //      将所有线性表Lb中但不在La的数据元素插入到La中(Lb不改变)
  5     ElemType e;
  6     int  La_len, Lb_len;
  7     int i;
  8     La_len = ListLength(*La);//求线性波La的表长
  9     Lb_len = ListLength(*Lb);//求线性表Lb的表长
 10     for(i = 1;i <= Lb_len; i++)
 11     {
 12         GetElem(Lb, i, &e); //从Lb表中第i个元素赋给e
 13         if(!LocateElem(La, e, equal))//表La中不存在和e相同的元素
 14             ListInsert(La, ++La_len, e);//在表La的最后插入元素e
 15     }
 16 }
 17 
 18 void MergeList(SqList * La, SqList * Lb, SqList * Lc)
 19 {   
 20     int i = 1;
 21     int j = 1;
 22     int k = 0;
 23     
 24     int La_len, Lb_len;
 25     ElemType ai, bj;
 26     
 27     InitList(Lc);               //创建空表Lc
 28     La_len = ListLength(*La);   //求线性表La的长度
 29     Lb_len = ListLength(*Lb);   //求线性表Lb的长度
 30     while(i <= La_len && j <= Lb_len)       //i,j分别表所La和Lb的序列
 31     {
 32         GetElem(La, i, &ai);        //将La中第i个元素赋给ai
 33         GetElem(Lb, j, &bj);        //将Lb中第j个元素赋给bj
 34         if(ai <= bj)        //  当La中的元素不大于Lb中当前元素
 35         {
 36             ListInsert(Lc, ++k, ai);        //在Lc最后插入ai
 37             i++;            //i指示La的下一个元素
 38         }
 39         else
 40         {
 41             ListInsert(Lc, ++k, bj);        //在Lc最后插入bj
 42             j++;            //j指示Lb的下一个元素
 43         }
 44     }
 45     //以下两个循环只会执行一个
 46     while(i <= La_len)      //将La剩下其余元素往下读写
 47     {
 48         GetElem(La, i++, &ai);  //将La中第i个元素赋给ai
 49         ListInsert(La, ++k, ai);    //在Lc表最后插入ai
 50     }
 51     while(j <= Lb_len)      //将Lb剩下其余元素往下读写
 52     {
 53         GetElem(Lb, j++, &bj);  //将Lb中第j个元素赋给bj
 54         ListInsert(Lc, ++k, bj);    //在Lc表最后插入bj
 55     }
 56 }

猜你喜欢

转载自blog.csdn.net/Cheng__C/article/details/81433519