顺序表实现集合并集运算

【问题描述】

设有两个用顺序表表示的有序集合,输出它们的并集,要求仍然保持有序。

【输入形式】

第一行输入两个整数N和M(不大于100),分别表示两个集合的长度;

第二行输入第一个集合的N个元素(递增有序);

第三行输入第二个集合的M个元素(递增有序);

【输出形式】

输出两个集合的并集(仍然保持有序),元素之间以空格分隔。

【样例输入】

5 4

-3 2 4 7 20

2 3 4 5

【样例输出】

-3 2 3 4 7 20

 

#include
#include
#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         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 (ilength&&jlength){
        if(L->slist[i]<=L2->slist[j]) {
            L3->slist[k++]=L->slist[i++];
        }else {
            L3->slist[k++]=L2->slist[j++];
        }
    }
    while(ilength) {
        L3->slist[k++]=L->slist[i++];
    }

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

}
void printList_sq(SqList *L){
    int i;
    for(i=0;ilength;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);
    scanf("%d%d",&n,&n2);
    createList_sq(&L,n);createList_sq(&L2,n2);
    insertList_sq(&L,&L2,&L3);
    deleteList_sq(&L3);
    printList_sq(&L3);

}


 

你可能感兴趣的:(数据结构)