#include <stdio.h>
#include <stdlib.h>
#define maxsize 1024
typedef int datatype;
typedef struct {
datatype data[maxsize];
int last;
} sequenlist;
sequenlist *InitList();
int Insert(sequenlist *, datatype, int);
int Length(sequenlist *);
void merge(sequenlist *La, sequenlist *Lb, sequenlist *Lc);
void PrintList(sequenlist *);
int main() {
int len_a = 6;
int a[6] = {2, 4, 5, 6, 6, 9};
int len_b = 4;
int b[4] = {1, 3, 7, 8};
sequenlist *La, *Lb, *Lc;
La = InitList();
Lb = InitList();
Lc = InitList();
int i, j;
for (i = 0; i < len_a; i++) {
La->data[i + 1] = a[i];
}
La->last = len_a;
for (j = 0; j < len_b; j++) {
Lb->data[j + 1] = b[j];
}
Lb->last = len_b;
printf("顺序表La为:\n");
PrintList(La);
printf("顺序表Lb为:\n");
PrintList(Lb);
printf("合并后的顺序表Lc为:\n");
merge(La, Lb, Lc);
PrintList(Lc);
Length(Lc);
return 0;
}
sequenlist *InitList() {
sequenlist *L = (sequenlist *)malloc(sizeof(sequenlist));
L->last = 0;
return L;
}
int Insert(sequenlist *L, datatype x, int i) {
int k;
if (L->last >= maxsize - 1) {
printf("表已满.\n");
return 0;
}
if (i < 1 || i > L->last + 1) {
printf("非法插入位置.\n");
return 0;
}
for (k = L->last; k >= i; k--) {
L->data[k + 1] = L->data[k];
}
L->data[i] = x;
L->last++;
return 1;
}
void merge(sequenlist *La, sequenlist *Lb, sequenlist *Lc) {
int i, j, k, a, b;
i = j = k = 1;
while (i <= La->last && j <= Lb->last) {
a = La->data[i];
b = Lb->data[j];
if ( a < b) {
Insert(Lc, a, k++);
i++;
} else {
Insert(Lc, b, k++ );
j++;
}
}
while (i <= La->last) {
a = La->data[i];
Insert(Lc, a, k++ );
i++;
}
while (j <= Lb->last) {
b = Lb->data[j];
Insert(Lc, b, k++ );
j++;
}
}
void PrintList(sequenlist *L) {
int i;
for (i = 1; i <= L->last; i++)
printf("%5d", L->data[i]);
printf("\n");
}
int Length(sequenlist *L) {
printf("表长度为%d.\n", L->last);
return L->last;
}