数据结构,用的是OJ给的部分提示代码
#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
typedef int Status;
#define OK 1;
#define False 0;
/*静态定义顺序表的结构体
#define maxSize 100
typedef int DataType;
type struct{
DataType data[maxSize];
int n;
}SeqList;
*/
//动态顺序表结构体的定义
typedef int DataType;
typedef struct{
DataType *data;
int maxSize, n;
}SeqList;
SeqList L1,L2,L3;
//创建顺序表,依次读入n个元素值
Status createList(SeqList *L, int n);
//依次输出顺序表中的所有元素
Status printList(SeqList *L);
//有序顺序表的合并
Status Merge(SeqList *L1, SeqList *L2, SeqList *L3);
int main(){
int len1,len2;
SeqList L1,L2,L3;
scanf("%d\n", &len1);
createList(&L1, len1);
scanf("%d\n", &len2);
createList(&L2, len2);
L3.data = (DataType*) malloc ((len1+len2)*sizeof(DataType));
L3.n = len1+len2;
Merge(&L1,&L2,&L3);
printList(&L3);
return 0;
}
//创建顺序表,依次读入n个元素值
Status createList(SeqList *L, int n){
int i;
L->data = (DataType*) malloc (n*sizeof(DataType));
for (i=1; i<n; i++) {
scanf("%d ",&(*L).data[i]);
}
(*L).n=n;
return OK;
}
//依次输出顺序表中的所有元素
Status printList(SeqList *L){
int i;
for (i =0; i<L->n;i++){
printf("%d ", L->data[i]);
}
printf("\n");
return OK;
}
//有序顺序表的合并
Status Merge(SeqList *L1, SeqList *L2, SeqList *L3){
int i=0, j=0, k=0;
if (L1->n+L2->n>L3->n){
return False;
}
while(i<L1->n&&j<L2->n){
if (L1->data[i]<=L2->data[j]){
L3->data[k]=L1->data[i];
i++;
k++;
}
else{
L3->data[k]=L1->data[j];
j++;
k++;
}
}
while(i<L1->n){
L3->data[k]=L1->data[i];
k++;
i++;
}
while(j<L2->n){
L3->data[k]=L1->data[j];
k++;
j++;
}
L3->n = k;
return OK;
}