//归并两个线性表 //已知线性表La和Lb中的数据元素按值非递减排列 //归并La和Lb得到的新线性表Lc,Lc的数据元素也按值非递减排列 void mergeList(SqList La,SqList Lb,SqList &Lc){ initList(Lc); int i=1; int j=1; //i,j分别指向La,Lb int k=0; int La_len=getLength(La);//4 int Lb_len=getLength(Lb);//7 while(i<=La_len&&j<=Lb_len){//La和Lb均非空 int ai=getElem(La,i); int bj=getElem(Lb,j); if(ai<=bj){ insertElem(Lc,++k,ai); insertElem(Lc,++k,bj); i++; j++; }else{ insertElem(Lc,++k,bj); insertElem(Lc,++k,ai); i++; j++; } } while(i<=La_len){ int ai=getElem(La,i++); insertElem(Lc,k+1,ai);//因为要把较长的线性表多余的部分全部添加到新列表最后面,因此插入位置为k+1 k++; } while(j<=Lb_len){ int bj=getElem(Lb,j++); insertElem(Lc,k+1,bj);//因为要把较长的线性表多余的部分全部添加到新列表最后面,因此插入位置为k+1 k++; } }
C++内部没有直接求数组长度的函数,要想求数组长度可以用模板定义一个函数:
//使用模板定义一个函数getArrayLen,该函数将返回数组array的长度 template <class T> int len(T& array) { return (sizeof(array) / sizeof(array[0])); }
用法:
len(array);