天天看點

c語言資料結構線性表LA和LB,資料結構(C語言版)設有線性表LA(3,5,8,110)和LB(2,6,8,9,11,15,20)求新集合?1:若LA和LB分别表示兩個集合A和B,求新集合A=A∪B(...

c語言資料結構線性表LA和LB,資料結構(C語言版)設有線性表LA(3,5,8,110)和LB(2,6,8,9,11,15,20)求新集合?1:若LA和LB分别表示兩個集合A和B,求新集合A=A∪B(...

優質解答

#include

#include

#define list_init_size 100

#define listincrement 10

typedef struct

{ int *elem;

int length;

int listsize;

} sqlist;

int initsqlist (sqlist *l)//初始化

{

l->elem=(int *)malloc(list_init_size*sizeof(int));

\x09if(!l->elem)

\x09\x09exit(0);

\x09l->length=0;

\x09l->listsize=list_init_size;

\x09return 0;

}

int listinsert_sq(sqlist *l,int i,int e)//插入一個元素

{

\x09int *p,*q;

\x09if(il->length+1)

\x09\x09exit(0);

\x09q=&(l->elem[i-1]);

\x09for(p=&(l->elem[l->length-1]);p>=q;--p)

\x09\x09*(p+1)=*p;

\x09*q=e;

\x09++l->length;

\x09return 0;

}

void add(sqlist *l,int e)//添加到最後

{

listinsert_sq(l,l->length+1,e);

}

void disp(sqlist *l)

{

int i;

for(i=0;ilength;i++)

\x09 printf("%d ",l->elem[i]);

printf("\n");

}

int find(sqlist *l,int e)//查找元素是否存在

{

int i,t=-1;

for(i=0;ilength;i++)

\x09if(l->elem[i]==e)

\x09{t=i;break;}

return t;

}

void opt_1(sqlist *la,sqlist *lb)//(相同元素不保留)

{

int i,j;

for(i=0;ilength;i++)

{

\x09j = find(la,lb->elem[i]);

if(j==-1)

\x09\x09listinsert_sq(la,la->length+1,lb->elem[i]);

}

}

void sort(sqlist *la) //排序

{

\x09int i,j,k;

\x09for(i=0;ilength;i++)

\x09\x09for(j=i+1;jlength;j++)

\x09\x09{

\x09\x09 if(la->elem[i]>la->elem[j])

\x09\x09 {

\x09\x09\x09 k = la->elem[i];

\x09\x09\x09 la->elem[i] = la->elem[j];

\x09\x09\x09 la->elem[j] = k;

\x09\x09 }

\x09\x09}

}

void opt_2(sqlist *la,sqlist *lb)//(相同元素保留)

{

int i,j;

for(i=0;ilength;i++)

{

\x09j = find(la,lb->elem[i]);

if(j!=-1)

\x09\x09listinsert_sq(la,j+1,lb->elem[i]);

\x09else

\x09\x09listinsert_sq(la,la->length+1,lb->elem[i]);

}

sort(la);

}

int main()

{

\x09sqlist La,Lb;

\x09initsqlist(&La);

add(&La,3);

add(&La,5);

add(&La,8);

add(&La,11);

\x09initsqlist(&Lb);

add(&Lb,2);

add(&Lb,6);

add(&Lb,8);

add(&Lb,9);

add(&Lb,11);

add(&Lb,15);

add(&Lb,20);

\x09disp(&La);

\x09disp(&Lb);

\x09opt_1(&La,&Lb);//操作(相同元素不保留)

\x09disp(&La);

\x09La.length = 0; //重新初始化La

add(&La,3);

add(&La,5);

add(&La,8);

add(&La,11);

\x09opt_2(&La,&Lb);//操作(相同元素保留)

\x09disp(&La);

\x09

\x09return 0;

}

輸出:

3 5 8 11

2 6 8 9 11 15 20

3 5 8 11 2 6 9 15 20

2 3 5 6 8 8 9 11 11 15 20