#include<stdio.h>
#include<stdlib.h> //分配数据
#define ERROR 0;
#define OK 1;
typedef
int
ElemType;
typedef
int
status;
typedef
struct
LNode
{
ElemType data;
struct
LNode *next;
}LNode,*LinkList;
status CreatList_LA(LinkList &LA,
int
n)
{
LNode *p;
int
i;
LA=(LinkList)
malloc
(
sizeof
(LNode));
LA->next=NULL;
for
(i=n;i>0;--i)
{
p=(LinkList)
malloc
(
sizeof
(LNode));
scanf
(
"%d"
,&p->data);
p->next=LA->next;
LA->next=p;
}
return
OK;
}
status CreakList_LB(LinkList &LB,
int
n)
{
LNode *p;status i;
LB=(LinkList)
malloc
(
sizeof
(LNode));
LB->next=NULL;
for
(i=n;i>0;--i)
{
p=(LinkList)
malloc
(
sizeof
(LNode));
scanf
(
"%d"
,&p->data);
p->next=LB->next;
LB->next=p;
}
return
OK;
}
status ListInsert_LA(LinkList &LA,status i,ElemType e)
{
LNode *p,*s;
status j;
p=LA;j=0;
while
(p&&j<i-1)
{
p=p->next;++j;
}
if
(!p||j>i-1)
return
ERROR;
s=(LinkList)
malloc
(
sizeof
(LNode));
s->data=e;
s->next=p->next;
p->next=s;
return
OK;
}
status ListDelete_LA(LinkList &LA,
int
i,ElemType &e)
{
LNode *p,*q;
status j;
p=LA;j=0;
while
(p||j<i-1)
{p=p->next;++j;}
if
(p->next==NULL||j>i-1)
return
ERROR;
q=p->next;
p->next=q->next;
e=q->data;
free
(q);
return
OK;
}
status GetElem_LA(LinkList LA,
int
i,ElemType e)
{
LNode *p;
p=LA;
status j;
j=0;
while
(p&&j<i-1)
{p=p->next;++j;}
if
(!p||j>i)
return
ERROR;
e=p->data;
return
OK;
}
status MergeList_L(LinkList &LA,LinkList &LB,LinkList &LC)
{
LNode *pa,*pb,*pc;
pa=LA->next;
pb=LB->next;
LC=pc=LA;
while
(pa&&pb)
{
if
(pa->data<=pb->data)
{
pc->next=pa;
pc=pa;
pa->next;
}
else
{
pc->next=pb;
pc=pb;
pb=pb->next;
}
pc->next=pa?pa:pb;
}
free
(LB);
}
status printfList_L(LinkList &L)
{
LNode *p;
int
i;
p=L->next;
while
(p)
{
printf
(
"%d "
,p->data);
p=p->next;
}
}
int
main()
{
ElemType e ;
LinkList LA,LB,LC;
status i,n;
printf
(
"输入向所创建LA链表中插入几个结点,n为:"
);
scanf
(
"%d"
,&n);
printf
(
"输入链表的结点数据:"
);
CreatList_LA(LA,n) ;
printf
(
"输入向所创建LB链表中插入几个结点,n为:"
);
scanf
(
"%d"
,&n);
printf
(
"输入链表的结点数据:"
);
CreakList_LB(LB,n);
printf
(
"输出链表LA为:"
);
printfList_L(LA);
printf
(
"\n输出链表LB为:"
);
printfList_L(LB);
printf
(
"\n输入在链表第几个位置插入结点,i,e为:"
);
scanf
(
"%d%d"
,&i,&e);
ListInsert_LA(LA,i,e);
printf
(
"\n插入后使出的链表为:"
);
printfList_L(LA);
printf
(
"\n输入在链表第几个位置删除结点,i为:"
);
scanf
(
"%d"
,&i);
ListDelete_LA(LA,i,e);
printf
(
"\n删除后的链表LA为:"
);
printfList_L(LA);
printf
(
"删除的第%d个结点所储存的元素为:%f"
,i,e);
printf
(
"\n输入想查找第几个元素结点,i为:"
);
scanf
(
"%d"
,&i);
GetElem_LA(LA,i,e);
printf
(
"\n查找到的第i个元素为:"
);
printf
(
"%d"
,e);
printf
(
"\n合并之后的链表为:"
);
MergeList_L(LA,LB,LC);
printfList_L(LC);
return
OK;
}