1、合并线性表
集合A和集合B分别用两个线性表LA和LB表示,求A∪B并用线性表LA表示。从LB中逐一取出元素,判断该元素是否存在LA中,若不在则将该元素插入LA中。
void CombineSqList(SqList &La,SqList &Lb){ int i,j; for(i=0;i<Lb.length;i++){ int cout=0; for(j=0;j<La.length;j++){ if(La.elem[j]==Lb.elem[j]) cout++; } if(cout==0) La.elem[La.length++]=Lb.elem[i]; } }
2、有序线性表的合并
已知线性表LA和LB中数据元素分别按非递减顺序排列,现要求将它们合并成一个新的线性表LC,并使得LC中的元素也按照非递减顺序排列。线性表初始为空,依次扫描LA和LB中的数据元素,比较当前元素的值,将较小元素的值插入LC表尾之后,如此反复,直到一个线性表扫描完毕,然后将未完的那个线性表中余下的元素逐个插入到LC的表尾之后。
//顺序表的有序合并,有序合并的前提,两个顺序表已经排序好的 void CombineSq(SqList &LA,SqList &LB,SqList &LC){//LA,LB是递增排序的 ElemType *pa,*pb,*pc,*pa_last,*pb_last; LC.length=LA.length+LB.length;//新表的长度为两个表的长度之和 LC.elem=new ElemType[LC.length];//分配空间 //LC.elem=(ElemType *)malloc(LC.length*sizeof(ElemType)); pc=LC.elem;//分别指向第一个元素 pa=LA.elem; pb=LB.elem; pa_last=LA.elem+LA.length-1;//指向最后一个元素 pb_last=LB.elem+LB.length-1; while((pa<=pa_last)&&(pb<=pb_last)){ if(*pa<=*pb) *pc++=*pa++;//就行比较然后就行赋值 else *pc++=*pb++; } while(pa<=pa_last) *pc++=*pa++;//把剩下的逐一插入 while(pb<=pb_last) *pc++=*pb++; }