参考代码:
#include <stdlib.h>
#include<stdio.h>
#include<ctype.h>
#include<string.h>
typedef struct listt//定义结构体
{
int data;
struct listt *next;
}*lists,List;//取别名
lists creatlist(int a)//创建链表
{
lists node;//定义头结点
node = (lists)malloc(sizeof(List));//取头结点
node->next=NULL;
lists w;
lists q;
w = node;
while(a--)
{
q = (lists)malloc(sizeof(List));
scanf("%d",&(*q).data);
q->next = w->next;
w->next = q;
w = q;
}
return(node);
}
int Listlength(lists a)//计算链表的长度
{
int len = 0;
a = a->next;
while(a!=NULL)
{
a = a->next;
len++;
}
return len;
}
int GetElem(lists x,int i,int e)//取第i个元素给e
{
lists w;
w = x;
w = w->next;//把头结点去掉
while(i--)
{
e = w->data;
w = w->next;
}
return e;
}
int LocateElem(lists l,int e)//判断l中是否有元素和e相等
{
lists w;
w = l;
w = w->next;
int len = Listlength(l);
for(int i = 0;i < len;i++)
{
if(w->data==e)
{
return 1;
}
w = w->next;
}
return 0;
}
void ListInsert(lists a,int e)
{
lists w;
w = a;
w=w->next;
int len = Listlength(w);
while(len--)
{
w=w->next;
}
lists p;
p = (lists)malloc(sizeof(List));
p->data = e;
p->next=NULL;
w->next = p;
}
void display(lists f)//将链表展示出来
{
lists c;
c = f;
c = c->next;
while(c!=NULL)
{
printf("%d ",c->data);
c = c->next;
}
printf("\n");
}
void outList(lists a)//释放结点
{
lists c;
a = a->next;
while(a!=NULL)
{
c = a;
a = a->next;
free(c);
}
}
void Union(lists a,lists b)
{
int lena = 0;
int lenb = 0;
int e;
int f;
lena = Listlength(a);
display(a);
display(b);
lenb = Listlength(b);
for(int i = 1;i <= lenb;i++)
{
f = GetElem(b,i,e);
if(LocateElem(a,f)==0)//判断是否含有不同元素,如果没有就进行插入
{
ListInsert(a,f);
}
display(a);//每次循环打印出一次
}
printf("\n");
outList(a);
}
int main()
{
int n;
int m;
lists a,b;
while(scanf("%d",&n)!=EOF)
{
a = creatlist(n);
scanf("%d",&m);
b = creatlist(m);
Union(a,b);
}
return 0;
}
0.0分
2 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复