【数据结构】顺序表实现两个集合的并运算

#include <stdio.h>
#include <malloc.h>
#define INIT_SIZE 100
#define INCREM 10
#define OK 1
#define ERROR 0

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

int initList_sq(SqList *L){
    L->slist=(ElemType*)malloc(INIT_SIZE*sizeof(ElemType));
    if(!L->slist)return ERROR;
    L->length=0;
    L->listsize=INIT_SIZE;
    return OK;

}
int createList_sq(SqList *L,int n){
    int i;
    for(i=0;i<n;i++)
        scanf("%d",&L->slist[i]);
        L->length=n;
        return OK;
}

int  insertList_sq(SqList *L,SqList *L2,SqList *L3){

      int i=0,j=0,k=0;

    while (i<L->length&&j<L2->length){
        if(L->slist[i]<=L2->slist[j]) {
            L3->slist[k++]=L->slist[i++];
        }else {
            L3->slist[k++]=L2->slist[j++];
        }
    }
    while(i<L->length) {
        L3->slist[k++]=L->slist[i++];
    }

    while(j<L2->length) {
        L3->slist[k++]=L2->slist[j++];
    }
    L3->length=k;
    return OK;
}
int deleteList_sq(SqList *L){
 int i=0,j;
    while(i<L->length)
    {
        while((L->slist[i]==L->slist[i+1])&&(i<L->length))
        {
            for(j=i;j<L->length;j++)
                L->slist[j]=L->slist[j+1];
            L->length--;
        }
        i++;
    }
    return OK;

}
void printList_sq(SqList *L){
    int i;
    for(i=0;i<L->length;i++)
    printf("%d ",L->slist[i]);
}
int main(){
    int n,n2;
    SqList L;SqList L2;SqList L3;
    initList_sq(&L);initList_sq(&L2);initList_sq(&L3);
    printf("输入两个集合的长度:"); 
    scanf("%d%d",&n,&n2);
    printf("输入第一个集合的元素:"); 
    createList_sq(&L,n);
    printf("输入第二个集合的元素:"); 
    createList_sq(&L2,n2);
    insertList_sq(&L,&L2,&L3);
    deleteList_sq(&L3);
    printf("并集:");
    printList_sq(&L3);

}

本文基于下方链接内容做出适当修改

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
链接:https://blog.csdn.net/qq_42285148/article/details/117393629

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值