22

作者 by aigle / 2022-01-18 / 暂无评论

G:\CODE\C2\cmake-build-debug\C2.exe
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
1 2 3 4 5 6 7 8 9 10 11 12 13 14
2 5 10 11
1 3 4 6 7 8 9 12 13 14 15 16 17 18 19
#include<stdlib.h>
#include<stdio.h>

#define MAXSIZE 100
typedef struct{
    int len;
    int size;
    int *data;
}sqlist;

int insert(sqlist * sq,int i,int x);//插入节点
void init(sqlist * sq);//创建节点
void list(sqlist sq);//打印顺序表
void andset(sqlist * a,sqlist * b,sqlist * c);//两两对比求交集
int insert(sqlist * sq,int i,int x){
    int j;
    if(i<1||i>sq->len+1){
        return -1;
    }
    for(j=sq->len;j>=i;j--){
        sq->data[j]=sq->data[j-1];
    }
    sq->data[i-1]=x;
    sq->len++;
    return 0;
}
void init(sqlist * sq){
    sq->data=(int *)malloc(sizeof(int)*MAXSIZE);
    sq->len=0;
    sq->size=MAXSIZE;
}
void list(sqlist sq){
    int i;
    for(i=0;i<sq.len;i++){
        printf("%d ",sq.data[i]);
    }
    printf("\n");
}
void andset(sqlist * a,sqlist * b,sqlist * c){
    int i=0,j=0,k=0;
    while(j<b->len&&k<c->len){
        if(b->data[j]>c->data[k]){
            k++;
        }else if(b->data[j]<c->data[k]){
            j++;
        }else{
            while(a->data[i]<b->data[j]&&i<a->len){
                i++;
            }
            if(a->data[i]==b->data[j]){
                int j;
                for(j=i;j<a->len-1;j++){
                    a->data[j]=a->data[j+1];
                }
                a->len--;
            }
            k++;
            j++;
        }
    }
}
void main(){
    sqlist a,b,c;
    init(&a),init(&b),init(&c);
    for (int i = 0; i < 20; i++) {
        insert(&a,i,i);
    }
    for (int i = 0; i < 15; i++) {
        insert(&b,i,i);
    }
    insert(&c,1,2),insert(&c,2,5),insert(&c,3,10),insert(&c,4,11);

    list(a),list(b),list(c);

    andset(&a,&b,&c);

    list(a);


}

评论已关闭