问: [image]20 数据结构与算法 线性表A、B,分别由单链表LA,LB存储,其中数据元素按
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
//类型定义
typedef char ElemType;
typedef struct Node
{ //结点类型
ElemType data; //数据域
struct Node *next; //指针域
}Node, *LinkList;
//函数声明
LinkList *Create (LinkList *L);//生成链表
LinkList UnionList(LinkList LA, LinkList LB, LinkList LC);//合并两个有序链表后仍有序
void ShowList(LinkList L);//输出单链表
void DestroyList(LinkList *L);//清除链表
void main()
{
LinkList *L1,*L2,*L3;
L1=(LinkList*)malloc(sizeof(LinkList));
L2=(LinkList*)malloc(sizeof(LinkList));
L3=(LinkList*)malloc(sizeof(LinkList));
L1=Create(L1);
ShowList(*L1);
L2=Create(L2);
ShowList(*L2);
*L3=UnionList(*L1,*L2,*L3);
ShowList(*L3);
DestroyList(L1);
free(L1);
free(L2);
free(L3);
}
LinkList *Create (LinkList *L)//建立一个单链表,将新结点插入表尾
{
Node *r, *s;
ElemType c;
int i,n;
*L = (LinkList) malloc (sizeof(Node)); //为头结点分配存储空间
r = *L; //r初值指向头结点
printf("请输入生成链表的结点数:");
scanf("%d",&n);getchar();//接收回车
for (i = 1; i <= n; i ++)
{
printf("请输入第%d个元素:",i);
c=getchar(); //获取一个数据元素
getchar();//接收回车
s = (LinkList) malloc (sizeof(Node)); //生成一个新结点
s -> data = c; //将要插入数据元素的值赋给新结点的数据域
s -> next = NULL; //链表末尾结点指针域为空
r -> next = s; //将新结点插入到当前链表的表尾上
r = s; //r始终指向链表的当前表尾
}
return L;
}
LinkList UnionList(LinkList LA, LinkList LB, LinkList LC)
{
Node *pa, *pb,*pc;
pa=LA->next;
pb=LB->next;
pc=LA;LC=pc;//也可以写成LC=pc=LA;
while((pa!=NULL)&&(pb!=NULL))
{
if(pa->data<=pb->data)
{
pc->next=pa;
pc=pa;
pa=pa->next;
}
else
{
pc->next=pb;
pc=pb;
pb=pb->next;
}
}
pc->next=pa?pa:pb;
free(LB);LB=NULL;
return LC;
}
void ShowList(LinkList L)
{
Node *p;
p=L->next;
if(p!=NULL)
do
{printf("%3c",p->data);
p=p->next;
} while(p!=NULL);
else printf("空链表\n");
printf("\n");
}
void DestroyList(LinkList *L)
{
Node *p;
if(*L==NULL){ free(L);return ;}
else
{
p=*L;
while(*L!=NULL)
{
p=*L;
*L=(*L)->next;
free(p);
}
}
printf("链表已清除!\n");
}
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。