例子:假设有两个集合A,B分别用两个线性表LA和LB表示
要求一个新的集合A=AUB
解题思路:1.从线性表LB中一次取得每个数据元素:GetElem(L,B,i)->e
2.依值在线性表LA中进行查房:LocateElem(L,A,equal())
3.若不存在,则插入:ListInsert(L,A,n+1,e);
例子:已知一个非纯集合B,是构造一个纯集合A,使A中只包含B中所有值各不相同的数据元素
void purge(List&La,List Lb){ InitList(La); //设置空的线性表LA La_len=ListLength(La); Lb_len=ListLength(Lb); //求线性表的长度 for(int i=1;i<Lb._len;i++){ GetElem(Lb,i,e); //从线性表中得到第i个元素 if(!LocateElem(La,e,equal()){ ++La_len; ListTnsert(La,La_len,e); //元素e插入线性表中 } } }
如果是有序的:aabbccccddefgghk
void purge(List&La,List Lb){ InitList(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(ListEmpty(LA)||!equal(en.e)){ ListInsert(La,++La_len,e) en=e; //en总是刚刚插入的最后一个元素 } } }
例子:归并两个其数据元素按值非递减有序排列的线性表、
LA,LB,求得线性表LC也具有 同样的特性
设La=(a1...ai..an) Lb=(b1....bj...bm)
Lc=(c1....ck...cm+n)
思路:分别从LA和LB中取当前元素ai,aj
若ai<=bj,则将ai插入到LC中,否则将bj插入到LC中
void MergcList(List La,List Lb,List&LC){ InitList(Lc); i=j=1;k=0; La_len=ListLength(La); Lb_len=ListLength(Lb); whiel((i<=La_len)&&(j<=Lb_len)){ //La和Lb均非空 GetElement(La,i,ai); GetElement(Lb,j,bj); if(ai<=bj){ ListInsert(Lc,++k,ai);++i} else{ListInsert(Lc,++k,bj);++j;} } while(i<=La_len){ GetElem(La,i++;ai); ListInsert(Lc,++k,ai) } while(j<=Lb_len){ GetElem(Lb,j++,bj); ListInsert(Lc,++k,bj); } }