//顺序标的合并
#include<stdio.h>
#include<stdlib.h>
#define max 100
typedef struct slist
{
int num[max];
int length;
}list;
void printlist(list *l);//顺序标的打印
void initiallist(list *l);//初始化顺序表
list* creatlist();//顺序标的创建
void mergelist(list *l1,list *l2,list *l3);//顺序标的合并
void insertelement(list *l,int i,int x);//插入元素
int serachelement(list *l,int x);//按照元素值查找元素
int main(void)
{
list *l1 = creatlist();
list *l2 = creatlist();
list l3;
printf("打印顺序表1:\n");
printlist(l1);
printf("打印顺序表2:\n");
printlist(l2);
mergelist(l1,l2,&l3);
printf("合并的顺序表如下:\n");
printlist(&l3);
return 0;
}
list* creatlist()
{
list *l;
l = (list *)malloc(sizeof(list));
printf("请输入顺序表的长度:\n");
scanf("%d",&l->length );
int i;
printf("请为顺序表添加元素:\n");
for(i = 0; i < l->length ; i++)
{
scanf("%d",&l->num [i]);
}
return l;
}
void printlist(list *l)
{
if(l->length == 0)
{
printf("顺序表的长度为零:\n");
}
else
{
int i;
for(i = 0; i < l->length ; i++)
{
printf("%d ",l->num [i]);
}
}
printf("\n");
}
void insertelement(list *l,int i,int x)
{
if(l->length == max)
{
printf("顺序表已满:\n");
}
else if(i < 1 || i > l->length + 1)
{
printf("无法插入元素:\n");
}
else
{
int j;
for(j = l->length - 1; j >= i - 1; j--)
{
l->num [j + 1] = l->num [j];
}
l->num [i - 1] = x;
l->length ++;
}
}
int serachelement(list *l,int x)
{
int i;
for(i = 0; i < l->length ; i++)
{
if(x == l->num [i])
{
return 1;
}
}
return 0;
}
void initiallist(list *l)
{
l->length = 0;
}
void mergelist(list *l1,list *l2,list *l3)
{
int i;
initiallist(l3);
for(i = 0; i < l1->length ; i++)
{
insertelement(l3,l3->length + 1,l1->num [i]);//将顺序表一中的元素全部插入l3中 注意位置序号 不能l3->length
}
for(i = 0; i < l2->length ; i++)
{
if(serachelement(l1,l2->num [i]) == 0)//不重复原则
{
insertelement(l3,l3->length + 1, l2->num [i]);
}
}
}
转载:https://blog.csdn.net/qq_44653420/article/details/100994653
查看评论