void union(List &La,List Lb) /将所有在线性表Lb中但不在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
void union(List &La, List Lb) { // 将所有在线性表Lb中但不在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
例2-2已知一个非纯集合B(依值非递 减有序排列),试构造一个纯集合A,使A 中只包含B中所有值各不相同的数据元素
例2-2 已知一个非纯集合B(依值非递 减有序排列),试构造一个纯集合A,使A 中只包含B中所有值各不相同的数据元素
void purge(List &La,List Lb){ 已知线性表Lb中的数据元素依值非递减有序排列(Lb是有序表) 构造线性表La,使其只包含Lb中所有值不相同的数据元素 InitList(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相同的数据元素,则插入之 }∥ourge
void purge(List &La, List Lb) { // 已知线性表Lb中的数据元素依值非递减有序排列(Lb是有序表) // 构造线性表La,使其只包含Lb中所有值不相同的数据元素 InitList(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 相同的数据元素,则插入之 } } // purge
例2-3归并两个“其数据元素按值非递减有序排列的' 线性表LA和LB,求得线性表LC也具有同样特性 设La=(a1yyav,an) Lb=(bi2...bi....bm) Lc=(c12....ck....Cm+n 则Ck=k=1,2,,mtn 1.分别从LA和LB中取得当前元素a和bj: 2.若abj,则将a插入到LC中,否则将bj插入到LC中。 void MergeList(List La,List Lb,List &Lc) ∥已知线性表La和Lb中的元素按值非递减排列。 ∥归并La和Lb得到新的线性表Lc, ∥Lc的元素也按值非递减排列
例2-3 归并两个“其数据元素按值非递减有序排列的” 线性表LA和LB,求得线性表LC也具有同样特性 设 La = (a1 , …, ai , …, an ) Lb = (b1 , …, bj , …, bm) Lc = (c1 , …, ck , …, cm+n) 则 Ck = k = 1, 2, …, m+n 1.分别从LA和LB中取得当前元素ai和bj; 2.若ai≤bj,则将ai插入到LC中,否则将bj插入到LC中。 void MergeList(List La, List Lb, List &Lc) { // 已知线性表La和Lb中的元素按值非递减排列。 // 归并La和Lb得到新的线性表Lc, // Lc的元素也按值非递减排列
InitList(Lc); i=j=1;k=0; La len=ListLength(La); Lb len ListLength(Lb); whie(i<=La_len)&&(G<=Lb_len){∥La和Lb均非空 GetElem(La,i,ai);GetElem(Lb,j,bj); if (ai<=bj){ListInsert(Lc,++k,ai);++i; else ListInsert(Lc,++k,bi);++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);} }/merge list
InitList(Lc); i = j = 1; k = 0; La_len = ListLength(La); Lb_len = ListLength(Lb); while ((i <= La_len) && (j <= Lb_len)) { // La和Lb均非空 GetElem(La, i, ai); GetElem(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);} } // merge_list