数据结构(严蔚敏著)两个集合相加顺序表实现

首先顺序表中基本操作

#define MaxSize 100
#define true 1
#define false 0
typedef struct{
    int *elem;
    int length;
    }SqList;
void InitList(SqList *L){
    (*L).elem=(int*)malloc(MaxSize*sizeof(int));
    (*L).length=0;
}
int ListEmpty(SqList L){
    if(L.length==0)
        return false;
    return true;
    }
int GetElem(SqList L,int n){
    if(n<1||n>L.length)
        return false;
    int outnum=L.elem[n-1];
    return outnum;
}
int LocateElem(SqList L,int i){
    int num=0;
    for(num;num<L.length;num++){
        if(i==L.elem[num])
            return true;
    }
    return false;
}
void TrverList(SqList L){
    int i=0;
    for(i;i<L.length;i++)
        printf("%d\n",(L.elem[i]));
}
int ListInsert(SqList *L,int i,int e){
    if(i>(*L).length+1||i<1)
        return false;
    int num=(*L).length;
    for(num;num>i-1;num--){
        (*L).elem[num]=(*L).elem[num-1];
    }
    (*L).elem[i-1]=e;
    (*L).length++;
    //return true;
}
int ListLength(SqList L){
    return L.length;
}

实现两个集合相加的函数

void MergeList(SqList *l1,SqList l2){
    //集合A B 合并
    int alength=ListLength(*l1);
    int blength=ListLength(l2);
    int num=1,num2=0;
    for(num;num<=blength;num++){
        int outnum=GetElem(l2,num);
        if(!LocateElem(*l1,outnum)){
            ListInsert(l1,l1->length+1,outnum);
            //printf("l.length=%d",l1->length);
        }
    }
}

主函数

int main()
{
    SqList l,n;
    SqList *s1=&l;
    SqList *s2=&n;
    InitList(s1);
    InitList(s2);
    int i=1,k=1;
    int la=0,lb=0;
    printf("集合A的长度为:");
    scanf("%d",&la);
    printf("请输入集合A的值");
    for(i;i<=la;i++){
        int d=0;
        scanf("%d",&d);
        ListInsert(s1,i,d);
    }
    TrverList(*s1);
    printf("集合B的长度为:");
    scanf("%d",&lb);
    printf("请输入集合B的值");
    for(k;k<=lb;k++){
        int e=0;
        scanf("%d",&e);
        ListInsert(s2,k,e);
    }
    TrverList(*s2);
    MergeList(s1,*s2);
    printf("输出集合A的值\n");
    TrverList(*s1);
    return 0;
}

测试结果

关于GetElem函数:

int GetElem(SqList L,int n,int* e){
    if(n<1||n>L.length)
        return false;
    *e=L.elem[n-1];
    return true;

}

这样写的时候输出一直不正确,改了一下方法才能输出。可能是指针问题 翻一下资料在修改


版权声明:本文为qq_39394276原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。