源码如下
#pragma once
#include<stdio.h>
#include<stdlib.h>
#define TURE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define OVERFLOW -2
typedef int ElemType;
typedef int Status;
typedef struct Node
{
ElemType data;
struct Node* next;
}LNode, * LinkList;
Status InitList(LinkList L);//构造一个空线性表L,创建成功返回OK
Status InputData(LinkList L);//初始化线性表,成功返回OK
int ListLength(LNode L);//求线性表的长度
Status GetElem(LNode L, int i, ElemType& e);//用e返回L中第i个数据,成功后返回OK
Status ListInsert(LinkList L, ElemType e);//在线性表L的链尾插入元素e,成功返回OK
void MergeList(LNode La, LNode Lb, LinkList Lc);//合并La和Lb到Lc中
void OutPut(LinkList L);//输出线性表所有元素
Status InitList(LinkList L)//构造一个空线性表L,创建成功返回OK
{
L->next = NULL;
L->data = 0;
return OK;
}
Status InputData(LinkList L)//初始化线性表,成功返回OK
{
int n;
LinkList Temp_L, p;
scanf_s("%d", &n);
L->data = n;
printf("请按空格依次输入每个元素:\n");
p = L;
while (n--)
{
if (!(Temp_L = (LinkList)malloc(sizeof(LNode))))
{
exit(OVERFLOW);
}
scanf_s("%d", &Temp_L->data);
Temp_L->next = NULL;
p->next = Temp_L;
p = Temp_L;
}
printf("******************************************\n");
return OK;
}
int ListLength(LNode L)//求线性表的长度
{
return L.data;
}
Status GetElem(LNode L, int i, ElemType& e)//用e返回L中第i个数据,成功后返回OK
{
LinkList p = &L;
if (i<0 || i > p->data)
{
return ERROR;
}
while (i)
{
p = p->next;
i--;
}
e = p->data;
return OK;
}
Status ListInsert(LinkList L, ElemType e)//在线性表L的链尾插入元素e,成功返回OK
{
int L_len = L->data;
LinkList newNode, p = L;
if (!(newNode = (LinkList)malloc(sizeof(LNode))))
{
exit(OVERFLOW);
}
newNode->next = NULL;
newNode->data = e;
while (L_len)
{
p = p->next;
L_len--;
}
p->next = newNode;
L->data++;
return OK;
}
void MergeList(LNode La, LNode Lb, LinkList Lc)//合并La和Lb到Lc中
{
int i = 1, k = 0, j = 1;
int La_len = ListLength(La);
int Lb_len = ListLength(Lb);
ElemType ai, bj;
while ((i <= La_len) && (j <= Lb_len))
{
GetElem(La, i, ai); GetElem(Lb, j, bj);
if (ai <= bj)
{
ListInsert(Lc, ai);
++i;
}
else
{
ListInsert(Lc, bj);
++j;
}
}
while (i <= La_len)
{
GetElem(La, i++, ai);
ListInsert(Lc, ai);
}
while (j <= Lb_len)
{
GetElem(Lb, j++, bj);
ListInsert(Lc, bj);
}
}
void OutPut(LinkList L)//输出线性表所有元素
{
LinkList Temp_L = L->next;
while (Temp_L)
{
printf("%d ", Temp_L->data);
Temp_L = Temp_L->next;
}
}
int main()
{
LNode La, Lb, Lc;
InitList(&La); InitList(&Lb); InitList(&Lc);
printf("请输入链La的元素个数:\n");
InputData(&La);
printf("请输入链Lb的元素个数:\n");
InputData(&Lb);
MergeList(La, Lb, &Lc);
printf("合并La和Lb后,Lc中元素如下:\n");
OutPut(&Lc);
return 0;
}