#define _CRT_SECURE_NO_WARNINGS 1
#include"stdio.h"
#include"windows.h"
#define maxsize 20
typedef struct {
int a[maxsize];
int last;
}A;
int HBlist(A *b,A*c,A*d)
{
int blow=0, clow=0;
if (b->last + 1 + c->last + 1 > maxsize)
{
printf("线性表长度不够");
return 1;
}
while (blow <= b->last && clow <= c->last)
{
if (b->a[blow] < c->a[clow])//b 比 c大
{
d->last++;
d->a[d->last] = b->a[blow];//将小的返回给 d
blow++;
}
else
{
d->last++;
d->a[d->last] = c->a[clow];
clow++;
}
}
if (blow == b->last)
{
d->last++;
d->a[d->last] = c->a[clow];
clow++;
}
if (clow == c->last)
{
d->last++;
d->a[d->last] = b->a[blow];
blow++;
}
return 0;
}
int main()
{
A b = { {2,2,4,4,5,6},5 }, *b1; b1 = &b;//创建两个有序表
A c = { {1,1,3,7,7},4 }, *c1; c1 = &c;
A d, *d1; d1 = &d;
int ret; int i;
d1->last = -1;//创建一个目标线性表
ret=HBlist(b1, c1, d1);
if (ret == 0)
{
for (i = 0; i < d1->last; i++)
{
printf("%d\n", d1->a[i]);
}
}
system("pause");
return 0;
}
总结 :合并时分情况 存就行了
一个线性表若是完了,就直接将剩下的合并到目标线性表