#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
typedef int ElemType;
typedef struct Node
{
ElemType data;
struct Node * next;
}Node, *LinkList;
//尾插法建表
void CreateFromTail(LinkList L)
{
Node *r, *s;
char c;
int flag =1; //flag为0 建表结束
r=L; //*r指针动态指向链表尾,初值指向头结点
while(flag)
{
scanf("%d",&c);
if(c != -99)
{
s=(Node*)malloc(sizeof(Node));
s->data=c;
r->next=s;
r=s;
}
else
{
flag=0;
r->next=NULL; /*将最后一个结点的next链域置为空,表示链表的结束*/
}
}
}
LinkList MergeLinkList(LinkList LA, LinkList LB)
{
Node *pa,*pb;
Node *r;
LinkList LC; //LC初始置空表
pa=LA->next; //pa单链表LA的第一个结点,
pb=LB->next;
LC=LA;
LC->next=NULL;
r=LC;
while(pa!=NULL && pb!=NULL) //将较小值结点插入到新表LC中
{
if(pa->data <= pb->data)
{
r->next=pa;
r=pa;
pa=pa->next;
}
else
{
r->next=pb;
r=pb;
pb=pb->next;
}
}
if(pa) //若表LA未完,剩余元素全部添加到LC*/
r->next=pa;
else
r->next=pb;
free(LB);
return(LC);
}
void main()
{
LinkList la,lb,lc;
Node *p;
la=(Node * )malloc(sizeof(Node));
la->next=NULL;
system("color 2F");
printf("请输入单链表LA中的元素(以-99结束!):\n");
CreateFromTail(la);
printf("单链表LA中元素为:");
p = la->next;
while(p!=NULL)
{
printf("%d ",p->data);
p=p->next;
}
printf("\n");
printf("请输入单链表LB中的元素(以-99结束!):\n");
lb=(Node * )malloc(sizeof(Node));
lb->next=NULL;
CreateFromTail(lb);
printf("单链表LB中元素为:");
p = lb->next;
while(p!=NULL)
{
printf("%d ",p->data);
p=p->next;
}
printf("\n");
lc=MergeLinkList(la,lb);
printf("如果您想看合并后的结果");
system("pause");
printf("合并后单链表LC中元素为:");
p = lc->next;
while(p!=NULL)
{
printf("%d ",p->data);
p=p->next;
}
printf("\n");
system("pause");
}
数据结构——两个有序单链表合并
最新推荐文章于 2022-09-24 17:26:11 发布