在两个顺序表La和Lb中,求并集元素放入顺序表Lc中

题目:已知两个整数集合A和B,他们的元素分别依元素递增有序存放在两个顺序表La和Lb中,设计一个算法,求出这两个集合的并集C,要求集合C的元素值递增有序存放在顺序表Lc中。

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

答:①创建顺序表La和Lb,里面按元素递增的次序分别存放集合A和集合B的数据;②循环用La中的每一个元素对比Lb中的所有元素,如果相等,则把La中的这个元素存放到Lc中。

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

#include <stdio.h>

#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++; 
    }
}

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])//如果相等就存储 
            {
                Lc->data[Lc->lenth] = La->data[i]; 
                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;
}
 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值