#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 Delete(sequenlist *L, int i);
void separate(sequenlist *La, sequenlist *Lb);
void PrintList(sequenlist *);
int main() {
int len_a = 10;
int a[10] = {1, 1, 4, 6, 5, 2, 6, 3, 8, 9};
sequenlist *La, *Lb;
La = InitList();
Lb = InitList();
int i, j;
for (i = 0; i < len_a; i++) {
La->data[i + 1] = a[i];
}
La->last = len_a;
printf("顺序表La为:\n");
PrintList(La);
separate(La, Lb);
printf("拆分后的顺序表La为:\n");
PrintList(La);
printf("拆分后的顺序表Lb为:\n");
PrintList(Lb);
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;
}
int Delete(sequenlist *L, int i) {
int j;
if (i < 1 || i > L->last) {
printf("非法删除位置.\n");
return 0;
}
for (j = i; j <= L->last - 1; j++) {
L->data[j] = L->data[j + 1];
}
L->last--;
return 1;
}
void separate(sequenlist *La, sequenlist *Lb) {
int i = 1, j = 1;
datatype x;
while (i <= La->last) {
x = La->data[i];
if (La->data[i] % 2 == 0) {
Insert(Lb, x, j);
j++;
Delete(La, i);
} else
i++;
}
}
void PrintList(sequenlist *L) {
int i;
for (i = 1; i <= L->last; i++)
printf("%5d", L->data[i]);
printf("\n");
}