顺序表的合并
#include <stdio.h>
#include <malloc.h>
typedef struct
{
int *elem;
int length;
}SqList;
int InitList_sq(SqList &A, int n)
{
A.elem=(int *)malloc(n*sizeof(int));
if(!A.elem)
return 0;
A.length=n;
return 1;
}
int Load_Sq(SqList &L)
{
int i;
if(L.length == 0)
return 0;
else
{
for(i=0;i <L.length;i++)
printf("%d ",L.elem[i]);
}
printf("\n");
return 1;
}
SqList MergeList_Sq(SqList &A,SqList &B, SqList &C)
{
int *pa=A.elem;
int *pb=B.elem;
C.length=A.length + B.length;
int *pc=C.elem=(int * )malloc(C.length * sizeof(int));
int *pa_last=A.elem + A.length;
int *pb_last=B.elem + B.length; //这两句话怎么理解阿
while((pa<pa_last)&&(pb <pb_last))
{
if(*pa <=*pb)
*pc++ = *pa++;
else
*pc++ = *pb++;
}
while(pa<pa_last)
*pc++=*pa++;
while(pb <pb_last)
*pc++=*pb++;
return C;
}
int main()
{
SqList A, B, C;
int na,nb;
scanf("%d",&na);
InitList_sq(A,na);
for(int i=0;i<na;i++)
{
scanf("%d",&A.elem[i]);
}
scanf("%d",&nb);
InitList_sq(B,nb);
for(int j=0;j<nb;j++)
{
scanf("%d",&B.elem[j]);
}
MergeList_Sq(A,B,C);
Load_Sq(C);
return 0;
}
[解决办法]
在知道了链表长度的前提下是可以使用这种方法跳转到列表末尾的
[解决办法]