69,382
社区成员
发帖
与我相关
我的任务
分享
//数据结构中的一个典型问题:两张有序顺序表合并成新的有序顺序表
#include<stdio.h>
void main()
{
int i, j =0 , p = 0;
int k=0;
int a[]={1,2,4,4,7,9}; //a,b均为旧表,c为新表
int b[]={0,1,3,6,8};
int c[20]; //此处取20是为了留足够空间给a,b表合并
for(i=0;i<9;i++)
{
if((a[j]<b[p])&&(j<6))
{
c[k] = a[j];
k++;
j++;
}
if((a[j]>=b[p])&&(p<5))
{
c[k] = b[p];
k++;
p++;
}
}
while(j<6)
{
c[k] = a[j];
k++;
j++;
}
for(i=0;i<k;i++)
{
printf("%d\n",c[i]); //此处输出C表的数值
}
getchar();
}
szArrayA, szArrayB, nSizeA, nSizeB;
int i = 0, j = 0, k = 0;
for(; i < nSizeA && j < nSizeB; k ++)
{
if(szArrayA[i] >= szArrayB[j])
{
tmp = szArrayA[i ++];
}
else
{
tmp = szArrayB[j ++];
}
C[k] = tmp;
}
// 最后谁没完将谁的数据拷贝到c后面
int* pTmp = NULL;
int nBegin = 0, nEnd = 0;
if(i < nSizeA) // A没完
{
pTmp = szArrayA;
nBegin = i;
nEnd = nSizeA;
}
else // B没完
{
pTmp = szArrayB;
nBegin = j;
nEnd = nSizeB;
}
for(; nBegin < nEnd; nBegin ++)
{
C[k ++] = pTmp[nBegin];
}
}
}