交并集问题

论坛 期权论坛 脚本     
匿名技术用户   2021-1-2 00:22   37   0

Description

已知A,B,C为三个元素值递增有序的线性表,要求对表A如下运算:删去那些既在表B中出现又在表C中出现的元素。线性表以顺序结构,编写实现上述运算和算法。

Input

第一行输入三个正整数m,n,用空格隔开,分别表示三个线性表的元素个数,其后三行依次输入ABC表中的元素。

Output

输出实现上述操作后的A表。

Sample Input

8 5 6

1 2 3 4 5 6 6 7

2 3 5 9 12

2 4 5 6 12 13

Sample Output

1 3 4 6 6 7

 
 
#include<stdio.h>
#include<malloc.h>

typedef int ElemType;
typedef int status;
# define LIST_INIT_SIZE 100
# define OK 1
# define OVERFLOW -1


typedef struct{
    ElemType *elem;
    int length;
    int listsize;
} SqList;

//初始化线性表
status InitList_Sq(SqList *l){
    l-> elem  = (ElemType *)malloc(LIST_INIT_SIZE * sizeof(ElemType)) ;
    if(!l->elem) exit(OVERFLOW);
    l->length = 0;
    l->listsize = LIST_INIT_SIZE;

    return OK;
}


void Create_sq(SqList *l,int n)
{
    int i;
    l->length=n;
    for(i=0;i<n;i++)
        scanf("%d",&(l->elem[i]));

}


void Disp_sq(SqList l)
{
    int i=0,n;
    n=l.length;
    for(i=0;i<n;i++)
        printf("%d ",l.elem[i]);

}


void Combine_sq(SqList * la,SqList lb,SqList lc)
{
   int i=0,j=0,k=0,m=0;
   int same;
   while(i<la->length&&j<lb.length&&k<lc.length)
    {
        if(lb.elem[j]<lc.elem[k])j++;
        else if(lb.elem[j]>lc.elem[k])k++;
        else
        {
            same=lb.elem[j];//找到了相同的元素SAME
            while(lb.elem[j]==same)j++;
            while(lc.elem[k]==same)k++;//J,K后移到新的元素
            while(i<la->length&&la->elem[i]<same)
              {la->elem[m++]=la->elem[i++];
              }//须保留的元素移动到新的位置
            while(i<la->length&&la->elem[i]==same)i++;//跳过相同的元素
        }
    }
   while(i<la->length)
   {
       la->elem[m++]=la->elem[i++];//A的剩余元素重新存储

   }
   la->length=m;/*先从B和C中找出共有元素,记为SAME,再在A中从当前位置开始,凡小于SAME的元素均保留(存到新的位置),
   等于SAME的就跳过,到大于SAME时就再找下一个SAME*/

}

int main()
{
    int s,t,u;
    SqList la;SqList lb;SqList lc;
    InitList_Sq(&la);
    InitList_Sq(&lb);
    InitList_Sq(&lc);
    scanf("%d%d%d",&s,&t,&u);
    Create_sq(&la,s);
    Create_sq(&lb,t);
    Create_sq(&lc,u);
    Combine_sq(&la,lb,lc);
    Disp_sq(la);
    printf("\n");
    return 0;
}

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:7942463
帖子:1588486
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP