★例2-2已知线性表LA和LB是非递减的,将两表合并成新的线性表LC,且LC也是非递减的。算法思想:将LA、LB两表中的元素逐一按序加入到一个新表LC中。设 La=(al,...,ai,...,an),Lb = (bl, ..., bj, ..., bm), Lc = (cl, ..., ck, ...)cm+n实现步骤:1·分别从La和Lb中取得当前元素a和bj;2.若ai<bi,则将ai插入到Lc中,否则将bi插入到Lc中
例2-2 已知线性表LA和LB是非递减的,将两表合 并成新的线性表LC,且LC也是非递减的。 算法思想: 将LA、LB两表中的元素逐一按序加入到一 个新表LC中。 设 La = (a1, ., ai, ., an), Lb = (b1, ., bj, ., bm) ,Lc = (c1, ., ck, ., cm+n) 1.分别从La和Lb中取得当前元素ai和bj; 2.若ai≤bj,则将ai插入到Lc中,否则将bj 插入到Lc中。 实现步骤:
void MergeList(List La, List Lb, List &L) //本算法将非递减的有序表La和Lb归并为LInitList(Lc);// 构造空的线性表Lci=j=l; k=0;La len = ListLength(La);Lb len = ListLength(Lb);while ((i <= La len) && (j <= Lb len)// La 和 Lb 均不空while(i<=-La len) // 若 La 不空while(j<=Lb len) //若 Lb 不空 // merge listO(ListLength(LA) + ListLength(LB
void MergeList(List La, List Lb, List &Lc) { // 本算法将非递减的有序表 La 和 Lb 归并为 Lc } // merge_list while ((i <= La_len) && (j <= Lb_len)) { // La 和 Lb 均不空 } while (i<=La_len) // 若 La 不空 while (j<=Lb_len) // 若 Lb 不空 InitList(Lc); // 构造空的线性表 Lc i = j = 1; k = 0; La_len = ListLength(La); Lb_len = ListLength(Lb); O(ListLength(LA)+ListLength(LB))
while (i<=La len)&&(i<-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;)U
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)/ 当La不空时GetElem(La, i++, ai):Listlnsert(Lc, ++k, ai):!//插入La表中剩余元素while(j<=Lb len) // 当Lb不空时GetElem(Lb, j++, bj)ListInsert(Lc, ++k, bj);!//插入Lb表中剩余元素U
while (i <= La_len) { // 当La不空时 GetElem(La, i++, ai); ListInsert(Lc, ++k, ai); } // 插入 La 表中剩余元素 while (j <= Lb_len) { // 当Lb不空时 GetElem(Lb, j++, bj); ListInsert(Lc, ++k, bj); } // 插入 Lb 表中剩余元素
8 2.2线性表的顺序表示和实现★线性表的顺序表示:用一组地址连续的储存单元依次诸存线性表的数据元素ai?a2ai-1a;线性表的起始地址称作线性表的基地址
线性表的顺序表示: 用一组地址连续的储存单元依次 储存线性表的数据元素。 §2.2 线性表的顺序表示和实现 a1 a2 . ai-1 ai . an 线性表的起始地址 称作线性表的基地址