合并线性表

来源:互联网 发布:宁波旅游 知乎 编辑:程序博客网 时间:2024/05/18 20:53

假设利用两个线性表LA和LB分别表示两个集合A和B,现要求一个新的集合A=A并B,这就要求对线性表LA扩大,将存在于线性表LB重而不存在于线性表LA中的元素插入到线性表LA中去。只要从线性表LB中依次取得每个数据元素,并依值在线性表LA重进行查访,若不存在,则插入之。

这里写代码片void union(List &La,List Lb){        //将所有在线性表L中但不在La中的数据元素插入到La中               La_len=ListLength(La);Lb_len=ListLength(Lb);  //求线性表的长度               for(i=1;i<=Lb_len;i++){                   GetElem(Lb,i,e);     //取Lb中第i个数据元素赋给e                   if(!=LocateElem(La,e,equal))ListInsert(La,++La_len,e);                   //La中不存在和e相同的数据元素,则插入之}                   }//union//在顺序表L中查访是否存在和e相同的数据元素的最简便的方法是,令e和L中的数据元素逐个比较,基本操作是“进行两个元素之间的比较”,若L中存在和e相同的元素ai,则比较次数为i(1<=i<=L.length),否则为L.length,即算法LocateElem_Sq的时间复杂度O(L.length).由此,对于顺序表La和Lb而言,union的时间复杂度为O(La.length*Lb.length)。  int LocateElem_Sq(SqList L,ElemType e,                         Status (*compare)(ElemType,ElemType)){           //在顺序线性表中查找第1个值,与e满足compare()的元素的位序           //若找到,则返回在L中的位序,否则返回0           i=1;      //i的初值为第1个元素的位序           p=L.elem;   //p的初值为第1个元素的存储位置           while(i<=L.length&&!(*compare)(*p++,e))++i;           if(i<=L.length)return i;           else return 0;           }//LocateRlrm_Sq                                 
0 0
原创粉丝点击