#include
#include
typedef struct Node
{
int data;
struct Node *next;
}Node, *LinkList;
LinkList LA,LB,LC;
void InitList(LinkList *L) //初始化单链表
{
*L=(LinkList)malloc(sizeof(Node));
(*L)->next=NULL;
}
void EnterList(LinkList &L) //尾插法创建单链表。
{
Node *s,*r;
int flag=1,integer;
r=L;
while(flag)
{
scanf("%d",&integer);
if(integer != -1)
{
s=(Node*)malloc(sizeof(Node));
s->data=integer;
r->next=s;
r=s;
}
else
{
flag=0;
r->next=NULL;
}
}
}
void UnionList(LinkList &LA,LinkList &LB,LinkList &LC)
{
Node *p,*q,*r,*y;
p=LA->next;
q=LB->next;
r=LC;
while (p)
{
y=(Node*)malloc(sizeof(Node));
y->data=p->data;
r->next=y;
r=y;
p=p->next;
}
while (q)
{
y=(Node*)malloc(sizeof(Node));
y->data=q->data;
r->next=y;
r=y;
q=q->next;
}
r->next=NULL;
}
void DeSameList(LinkList *LC)//删除c表的相同元素。
{
Node *p,*q,*r;
for(p=(*LC)->next;p!=NULL;p=p->next)
for(q=p->next,r=p;q!=NULL;q=q->next)
if(q->data==p->data)
{
r->next=q->next;
free(q);
q=r;
}
else
r=r->next;
}
void MergeList(LinkList *LA,LinkList *LB,LinkList *LC)
{ /*归并算法*/
Node *p,*q,*r;
p=(*LA)->next;
q=(*LB)->next;
*LC=*LA;
(*LC)->next=NULL;
r=*LC;
while(p != NULL && q !=NULL)
{
if(p->data <= q->data)
{
r->next=p;
r=p;
p=p->next;
}
else
{
r->next=q;
r=q;
q=q->next;
}
r->next=p?p:q;
}
free(*LB);
}
void printList(LinkList *L)
{
Node *p=(*L)->next;
while(p!=NULL)
{
printf("%3d",p->data);
p=p->next;
}
printf("\n");
}
void DestroyList(LinkList *L) //清空链表
{ Node *p,*r; p=*L;
while(!p->next)
{ r=p;
p=p->next;
free(r); }
printf("删除成功!"); }
void first()
{
printf("请输入顺序表LA(当输入-1时结束):\n");
InitList(&LA);
EnterList(LA);
printf("请输入顺序表LB(当输入-1时结束):\n");
InitList(&LB);
EnterList(LB);
printf("表LA和表LB合并后表LC为:");
InitList(&LC);
UnionList(LA,LB,LC);
DeSameList(&LC);
printList(&LC);
printf("