#include<stdio.h>
#include<stdlib.h>
#define LIST_INIT_SIZE 100//链表的最大长度
#define LISTINREMENT 12//链表现有的长度
typedef struct sqlist {
int *A;
int length;//链表当前长度
int listsize;//链表最大长度
};
//初始化链表
int InitList(sqlist &L){
L.length = 0; //长度初始化为0
L.listsize= LIST_INIT_SIZE;
L.A=(int*)malloc(LIST_INIT_SIZE*sizeof(int));//给链表分配最大的一内存块
return 1;
}
/*被插入的链表为全局的 j为插入的位数 e是需要插入的元素 */
void ListInsert(sqlist &L,int j,int e){
int j;
for(j = L.length - 1 ;j > 0 ;j--)
L.A[j+1] = L.A[j];
L.A[j] = e;
L.length++;//插入一个当前链表的长度加1
}
//计算链表长度
int ListLength(sqlist L){
return L.length;
}
//从链表L中获取 第i个元素的值
void GetElem(sqlist L,int i,int &e){
e = L.A[i];
}
//将 链表La Lb 按照从小到大的顺序 一次插入到链表Lc中去
void MergeList(sqlist La,sqlist Lb,sqlist &Lc){
int i, j ,k,La_len,Lb_len;
InitList(Lc);
i = j = 0;
k = 0;
La_len = ListLength(La);
Lb_len = ListLength(Lb);
while((i <= La_len-1) && (j <= Lb_len-1)){
GetElem (La, i, La.A[i]);
GetElem(Lb, j, Lb.A[j]);
if (La.A[i] <= Lb.A[j] )
{
ListInsert (Lc, k, La.A[i]);
k++;
++i;
// printf("%d
",k);
}
else
{
ListInsert(Lc,k,Lb.A[j]);
k++;
++j;
//printf("%d
",k);
}
}
//printf("%d
",i);
// printf("%d
",j);
while (i <= La_len-1){
GetElem(La,i,La.A[i]);
// printf("%d
",La.A[i]);
//i++;
//printf("%d
",k);
ListInsert(Lc,k,La.A[i]);
k++;
//printf("%d
",Lc.A[11]);
// printf("%d
",k);
i++;
}
while (j <= Lb_len-1)
{
GetElem(Lb,j,Lb.A[j]);
j++;
ListInsert(Lc,k,Lb.A[j]);
k++;
//printf("test");
}
//printf("%d",Lc.A[10]);
}
int main()
{
int i;
sqlist La;
sqlist Lb;
sqlist Lc;
InitList( La);
InitList( Lb);
La.A[0]=3;
La.A[1]=5;
La.A[2]=8;
La.A[3]=21;
La.length=4;
Lb.A[0]=2;
Lb.A[1]=6;
Lb.A[2]=8;
Lb.A[3]=9;
Lb.A[4]=11;
Lb.A[5]=15;
Lb.A[6]=20;
Lb.length=7;
MergeList(La, Lb, Lc);
//printf("%d
",Lc.length);
for(i = 0; i <Lc.length; i++)
printf("%d
",Lc.A[i]);
return 0;
}