欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

算法2.2数据结构C语言版严蔚敏

程序员文章站 2022-05-22 14:57:44
...

已知线性表la和lb中的数据元素按值非递减有序排列,现要求将la和lb归并为一个新的线性表lc,且lc中的数据元素仍按值非递减有序排列。

/*已知线性表La和Lb中的数据元素按值非递减排列
归并La和Lb得到新的线性表Lc,Lc的数据元素也按值非递减排列 */

void MergeList(List La,List Lb,List &Lc){
InitList(Lc);  //构造一个空的线性表Lc
i = j = 1; k = 0;  //指针i、j分别指向La和Lb中的元素
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);  //获取La中第i个位置的元素并赋值给ai,bi同理
	if(ai <= bj)  {ListInsert(Lc,++k,ai);++i;}  //添加小的一个到Lc中,并且将对应的指针+1
	else{ListInsert(Lc,++k,bj); ++j} 
}
while(i <= La_len){  //情况1:Lb的都填进去了,还剩La的
	GetElem(La,i++,ai);ListInsert(Lc,++k,ai);  
}
while(j <= Lb_len){  //情况2:La的都填进去了,还剩Lb的
	GetElem(Lb,j++,bj);ListInsert(Lc,++k,bj);
}