线性表的归并
题目描述:已知顺序线性表La和Lb的元素按值非递减排列。归并La和Lb得到新的顺序线性表Lc,Lc的元素也按值非递减排列。
顺序存储实现
采用顺序存储形式,该程序还添加了归并以外的几个功能,可供使用参考。
#include<stdio.h>
#include<stdlib.h>
#define OK 1
#define ERROR 0
#define OVERFLOW -1
#define LIST_SIZE 50
#define INCREACE 50
typedef struct {
int* elem;
int length;
int Listsize;
}SqList;
typedef int Status;
Status InitList(SqList* L) {
L->elem = (int*)malloc(LIST_SIZE * sizeof(int));
if (!L->elem)exit(OVERFLOW);
L->Listsize = LIST_SIZE;
L->length = 0;
return OK;
}
Status CreateList(SqList* L) {
int n = 0;
printf("构建线性表,输入元素个数:");
scanf_s("%d", &n);
printf("输入%d个元素!请输入:",n);
for (int i = 0;i < n;i++) {
scanf_s("%d", &L->elem[i]);
L->length++;
}
printf("构建完成!");
return OK;
}
Status Show(SqList L) {
printf("线性表为:");
if (L.length < 1) {
printf("空表!");return ERROR; }
for (int i = 0;i < L.length;i++) {
printf("%d ", L.elem[i]);
}
printf("-----数组长度为:%d\n\n", L.length);
return OK;
}
Status ListInsert(SqList* L, int p, int v) {
if (p<1 || p>L->length + 1)exit(ERROR);
if (L->length==L->Listsize) {
printf("\n内存不足,增加内存!");
int* new = NULL;
new = (int*)realloc(L->elem, (L->Listsize + INCREACE) * sizeof(int));
if (!new)exit(OVERFLOW);
L->elem = new;
L->Listsize += INCREACE;
}
for (int j = L->length;j >= p;j--) {
L->elem[j] = L->elem[j - 1];
}
L->elem[p - 1] =