两个顺序表A和B,求属于A不属于B的元素并放入到顺序表C中

设有两个顺序表A和B,编写一个算法将属于A,但不属于B的元素放到另一个顺序表C中,

(1)要求简单给出算法的设计思想;

(2)采用C语言描述算法。

/*
算法设计思想,用La中的每一个,与Lb中的所有进行比较,如果不相等,则把数据存储到Lc中 
*/
 

#include
 
#define MAX 100  //假设一个顺序表最大存储100个数据 
typedef struct sequence_list
{
    int data[MAX]; //用于存储数据 
    int lenth;   //用于表示顺序表中实际存储数据的个数 
}seq_list;

void CreatSeqlist(seq_list *L)
{
    int i;
    int n;
    L->lenth = 0; 
    
    printf("请输入一个小于等于%d的正整数\n",MAX);//表示 创建的表最大能存多少个数据
    scanf("%d",&n);
    
    printf("请按从小到大的顺序输入%d个数据\n",n);
    for (i = 0; i < n; i++)
    {
        scanf("%d",&(L->data[i]));
        L->lenth++; 
    }
}

//将属于La,但不属于Lb的元素放入到Lc中 
seq_list * qiu_union_set(seq_list *La,seq_list *Lb,seq_list *Lc) 
{
    int i,j;
    Lc->lenth = 0;
    
    for(i = 0; i < La->lenth; i++)
    { 
        for(j = 0; j < Lb->lenth; j++)
        {
            if(La->data[i] == Lb->data[j])//如果相等就跳过 
            {
                break; //表示La中那个数在Lb中,那La中的这个数没必要继续比,可以跳出这个循环,用下一个La中的数进行比较 
            }
            
        }
        
        //上一个循环能够结束,有两个原因,一个原因是La的某个数和Lb中某个数相等,执行了break语句
        //另外一个原因是,用La的某个数与所有的Lb的数据都比较过,没发现相等的数据,那么此时j==Lb->lenth
        if(j == Lb->lenth)
        {
            Lc->data[Lc->lenth] = La->data[i];//说明 La->data[i]与Lb中的所有都不相等,则存储到Lc中
            Lc->lenth++; 
        } 
        
    } 
    return Lc;

}

//打印表中数据 
void pri_seqlist(seq_list *L)
{
    int i;
    for(i = 0; i < L->lenth; i++)
    {
        printf("%d ",L->data[i]);
        
    }
    printf("\n");

}

int main(void)
{
    seq_list La,Lb,Lc;
    //创建顺序表 La和Lb 
    printf("正在创建表La,请按提示输入数据\n");
    CreatSeqlist(&La);
    //创建顺序表 Lb
    printf("正在创建表Lb,请按提示输入数据\n");
    CreatSeqlist(&Lb);
    
    //求交集
    qiu_union_set(&La,&Lb,&Lc);
    
    printf("La中的数据是:\n");
    pri_seqlist(&La);
    
    printf("Lb中的数据是:\n");
    pri_seqlist(&Lb);
    
    printf("Lc中的数据是:\n");
    pri_seqlist(&Lc);
    return 0;
}
 

你可能感兴趣的:(C语言算法题)