算法2.1 例2-1利用两个线性表LA和LB分别表示两个集合A和B 现要求一个新的集合A=A∪B。 void union list &La, List Lb)i La len=listlength (La) Lb len=listlength(Lb) for(F=1; K =lb len; I++) getelem(b, I, e) if (!locateelem(la, e, equal) listinsert(la, ++la en, e)
算法2.1 • 例2-1 利用两个线性表LA和LB分别表示两个集合A和B, 现要求一个新的集合A=A∪B。 void union(List &La,List Lb) { La_len=listlength(La); Lb_len=listlength(Lb); for(I=1;I<=lb_len;I++) { getelem(lb,I,e); if (!locateelem(la,e,equal)) listinsert(la,++la_en,e) } }
算法2.2 例2-2已知线性表LA和线性表LB中的数 据元素按值非递减有序排列,现要求 LA和LB归并为一个新的线性表LC,且LC 中的元素仍按值非递减有序排列 此问题的算法如下 void mergelist(list la, list Ib, list &lc) initlist(lc) I==1;k=0; la len=listlength (la) Ib len=listlength(b)
• 算法2.2 • 例2-2 巳知线性表LA和线性表LB中的数 据元素按值非递减有序排列,现要求将 LA和LB归并为一个新的线性表LC,且LC 中的元素仍按值非递减有序排列。 • 此问题的算法如下: void mergelist(list la,list lb,list &lc) { initlist(lc); I=j=1;k=0; la_len=listlength(la); lb_len=listlength(lb);
while((=la len)&&g<=lb len)) i getelem(la, I, ai) getelem(lb,j, bj) ifai<=bi) flistinsert(Ic, ++k, ai); ++I; else flistinsert(Ic,++k, bj: ++; 3 while(=la len) i getelem((la, I++, ai) listinsert(Ic, ++k, ai)
while((I<=la_len)&&(j<=lb_len)) { 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(<=lb len) getelem((b,j++, bj) listinsert(lc, ++k, bi)
while(j<=lb_len) { getelem((lb,j++,bj); listinsert(lc,++k,bi); } }
22线性表的顺序存储结构 221线性表 把线性表的结点按逻辑顺序依次存放在一组 地址连续的存储单元里。用这种方法存储的线性 表简称顺序表。 假设线性表的每个元素需占用1个存储单元, 并以所占的第一个单元的存储地址作为数据元素 的存储位置。则线性表中第i+1个数据元素的存 储位置LOC(a)和第讠个数据元素的存储位置 LOCa;)之间满足下列关系: LOC(a i +1=LOC(a+ 线性表的第个数据元素a1的存储位置为 LOC(a=LOC(a1)+(-1)*1
• 2.2 线性表的顺序存储结构 • 2.2.1 线性表 把线性表的结点按逻辑顺序依次存放在一组 地址连续的存储单元里。用这种方法存储的线性 表简称顺序表。 假设线性表的每个元素需占用l个存储单元, 并以所占的第一个单元的存储地址作为数据元素 的存储位置。则线性表中第i+1个数据元素的存 储位置LOC( a i+1)和第i个数据元素的存储位置 LOC(a i )之间满足下列关系: LOC(a i+1)=LOC(a i )+l 线性表的第i个数据元素ai的存储位置为: LOC(ai )=LOC(a1 )+(i-1)*l