利用线性表实现集合A并上B

分析:依次从线性表LB中取出每个数据元素,并依次在线性表LA中查找该元素,如果LA中不存在该元素,则将该元素插入LA中。

<span style="font-size:18px;"># include<stdio.h>
# include<stdlib.h>
# define ListSize 100
typedef int DataType;
typedef struct
{
 DataType list[ListSize];
 int length;
}SeqList;
void InitList(SeqList *L)//初始化线性表 
{
 L->length=0;
}
int ListEmpty(SeqList L)//判断线性表是否为空 
{
if(L.length==0)
return 1;
else
return 0; 
} 
int GetElem(SeqList L,int i,DataType *e)//按序号查找 
{
 if(i<1||i>L.length)
 return -1;
 *e=L.list[i-1];
 return 1;
}
int LocateElem(SeqList L,DataType e)//按内容查找 
{
 int i;
 for (i=0;i<L.length;i++)
 if(L.list[i]==e)
 return i+1;
 return 0;
}
int InsertList(SeqList *L,int i,DataType e)//插入元素判断是否合法 
{
 int j;
 if(i<1||i>L->length+1)
 {
  printf("插入位置不合法!\n");
  return -1;
 }
 else if(L->length>=ListSize)
 {
  printf("顺序表已满,不能插入元素。\n");
  return 0;
 }
 else{
  for(j=L->length;j>=i;j--)
  L->list[j]=L->list[j-1];
  L->list[i-1]=e;
  L->length=L->length+1;
  return -1;
 }
}
void UnionAB(SeqList *A,SeqList B);
int main()
{
 int i,flag;
 DataType e;
 DataType a[]={2,3,17,20,9,31};
 DataType b[]={8,31,5,17,22,9,48,67};
 SeqList LA,LB;//声明顺序表LA和LB 
 InitList(&LA);//初始化LA 
 InitList(&LB);//初始化LB 
 for(i=0;i<sizeof(a)/sizeof(a[0]);i++)//将数组A中的元素插入到LA中 
 {
  if(InsertList(&LA,i+1,a[i])==0)
  {
   printf("位置不合法");
   return 0;
  }
 }
 for(i=0;i<sizeof(b)/sizeof(b[0]);i++)//将数组A中的元素插入到LB中
 {
 if(InsertList(&LB,i+1,b[i])==0)
  {
   printf("位置不合法");
   return 0;
  } 
 }
 printf("顺序表LA中的元素:\n");
 for(i=1;i<=LA.length;i++)//输出顺序表LA中的每个元素 
 {
  flag=GetElem(LA,i,&e);
  if(flag==1)
  printf("%4d",e);
 }
 printf("\n");
 printf("顺序表LB中的元素:\n");
 for(i=1;i<=LB.length;i++)//输出顺序表LB中的每个元素  
 {
  flag=GetElem(LB,i,&e);
  if(flag==1)
  printf("%4d",e);
 }
 printf("\n");
 printf("将LB中但不在LA中的元素插入到LA中:\n");
 UnionAB(&LA,LB);
 for(i=1;i<=LA.length;i++)
 {
  flag=GetElem(LA,i,&e);
  if(flag==1)
  printf("%4d",e);
 }
 printf("\n");
}
void UnionAB(SeqList *LA,SeqList LB)
{
 int i,flag,pos;
 DataType e;
 for(i=1;i<=LB.length;i++)
 {
  flag=GetElem(LB,i,&e);
  if(flag==1)
  {
   pos=LocateElem(*LA,e);
   if(!pos)
   InsertList(LA,LA->length+1,e);
  }
}
}</span>


  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值