假设两个顺序线性表La和Lb分别表示两个集合A和B,如何实现A=A ∩B
来源:学生作业帮 编辑:作业帮 分类:综合作业 时间:2024/05/25 14:14:01
假设两个顺序线性表La和Lb分别表示两个集合A和B,如何实现A=A ∩B
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
typedef int status;
typedef int ElemType;
#define TRUE 1
#define ERROR 0
#define FALSE 0
#define OK 1
#define OVERFLOW -2
#define list_init_size 100
#define listincrement 10
typedef struct{
\x09ElemType *elem;
\x09int length;
\x09int listsize;
}sqlist;
status equal(ElemType a,ElemType b)
{if(a==b)
return TRUE;
else
return FALSE;
}
int listlength(sqlist l)
{ return l.length;}
status listinsert(sqlist *l,int i,ElemType e)
{
\x09ElemType *newbase,*q,*p;
\x09if(i<1||i>(*l).length+1)
\x09return ERROR;
\x09if((*l).length>=(*l).listsize){
\x09\x09newbase=(ElemType*)realloc((*l).elem,((*l).listsize+listincrement)*sizeof(ElemType));
if(!newbase) exit(OVERFLOW);
\x09 (*l).elem=newbase;
\x09 (*l).listsize+=listincrement;
}
q=&((*l).elem[i-1]);
for(p=&((*l).elem[(*l).length-1]);p>=q;--p)
\x09 *(p+1)=*p;
*q=e;
++(*l).length;
return OK;
}
status initlist(sqlist *l){
\x09(*l).elem=(ElemType*)malloc(list_init_size*sizeof(ElemType));
\x09if(!(*l).elem)
\x09\x09exit(OVERFLOW);
\x09(*l).length=0;
\x09(*l).listsize=list_init_size;
\x09return OK;
}
status getelem(sqlist l,int i,ElemType *e)
{ if(i<1||i>l.length)
exit(ERROR);
*e=*(l.elem+i-1);
return OK;
}
int LocateElem(sqlist L,ElemType e,status(*compare)(ElemType,ElemType))
{
ElemType *p;
int i=1;
p=L.elem;
while(i<=L.length&&!compare(*p++,e))
++i;
if(i<=L.length)
return i;
else
return 0;
}
void print(ElemType *c)
{
printf("%d ",*c);
}
status ListTraverse(sqlist l,void(*vi)(ElemType *))
{
ElemType *p;
int i;
p=l.elem;
for(i=1;i<=l.length;i++)
vi(p++);
printf("\n");
return OK;
}
void Union(sqlist *la,sqlist lb)
{
int la_len,lb_len;
int i;
\x09ElemType e;
\x09la_len=listlength(*la);
\x09lb_len=listlength(lb);
\x09for(i=1;i<=lb_len;i++)
\x09{ getelem(lb,i,&e);
\x09 if(!LocateElem(*la,e,equal))
\x09\x09 listinsert(la,++la_len,e);
}
}
void main()
{
\x09sqlist la,lb;
int j,i;
\x09i=initlist(&la);
\x09if(i==1)
\x09\x09for(j=1;j<=6;j++)
i=listinsert(&la,j,j);
\x09\x09printf("la= ");
ListTraverse(la,print);
initlist(&lb);
\x09for(j=1;j<=5;j++)
i=listinsert(&lb,j,2*j);
\x09\x09printf("lb= :");
ListTraverse(lb,print);
\x09 Union(&la,lb);
\x09 printf("la :");
ListTraverse(la,print);
}
#include<stdlib.h>
#include<malloc.h>
typedef int status;
typedef int ElemType;
#define TRUE 1
#define ERROR 0
#define FALSE 0
#define OK 1
#define OVERFLOW -2
#define list_init_size 100
#define listincrement 10
typedef struct{
\x09ElemType *elem;
\x09int length;
\x09int listsize;
}sqlist;
status equal(ElemType a,ElemType b)
{if(a==b)
return TRUE;
else
return FALSE;
}
int listlength(sqlist l)
{ return l.length;}
status listinsert(sqlist *l,int i,ElemType e)
{
\x09ElemType *newbase,*q,*p;
\x09if(i<1||i>(*l).length+1)
\x09return ERROR;
\x09if((*l).length>=(*l).listsize){
\x09\x09newbase=(ElemType*)realloc((*l).elem,((*l).listsize+listincrement)*sizeof(ElemType));
if(!newbase) exit(OVERFLOW);
\x09 (*l).elem=newbase;
\x09 (*l).listsize+=listincrement;
}
q=&((*l).elem[i-1]);
for(p=&((*l).elem[(*l).length-1]);p>=q;--p)
\x09 *(p+1)=*p;
*q=e;
++(*l).length;
return OK;
}
status initlist(sqlist *l){
\x09(*l).elem=(ElemType*)malloc(list_init_size*sizeof(ElemType));
\x09if(!(*l).elem)
\x09\x09exit(OVERFLOW);
\x09(*l).length=0;
\x09(*l).listsize=list_init_size;
\x09return OK;
}
status getelem(sqlist l,int i,ElemType *e)
{ if(i<1||i>l.length)
exit(ERROR);
*e=*(l.elem+i-1);
return OK;
}
int LocateElem(sqlist L,ElemType e,status(*compare)(ElemType,ElemType))
{
ElemType *p;
int i=1;
p=L.elem;
while(i<=L.length&&!compare(*p++,e))
++i;
if(i<=L.length)
return i;
else
return 0;
}
void print(ElemType *c)
{
printf("%d ",*c);
}
status ListTraverse(sqlist l,void(*vi)(ElemType *))
{
ElemType *p;
int i;
p=l.elem;
for(i=1;i<=l.length;i++)
vi(p++);
printf("\n");
return OK;
}
void Union(sqlist *la,sqlist lb)
{
int la_len,lb_len;
int i;
\x09ElemType e;
\x09la_len=listlength(*la);
\x09lb_len=listlength(lb);
\x09for(i=1;i<=lb_len;i++)
\x09{ getelem(lb,i,&e);
\x09 if(!LocateElem(*la,e,equal))
\x09\x09 listinsert(la,++la_len,e);
}
}
void main()
{
\x09sqlist la,lb;
int j,i;
\x09i=initlist(&la);
\x09if(i==1)
\x09\x09for(j=1;j<=6;j++)
i=listinsert(&la,j,j);
\x09\x09printf("la= ");
ListTraverse(la,print);
initlist(&lb);
\x09for(j=1;j<=5;j++)
i=listinsert(&lb,j,2*j);
\x09\x09printf("lb= :");
ListTraverse(lb,print);
\x09 Union(&la,lb);
\x09 printf("la :");
ListTraverse(la,print);
}
假设两个顺序线性表La和Lb分别表示两个集合A和B,如何实现A=A ∩B
数据结构算法实现:利用两个线性表LA和LB分别表示两个集合A和B,现要求一个新的集合A=A并B.
C语言编程题,利用两个线性表LA和LB分别表示两个集合A和B,现要求一个集合A=A并B
假设两线性表LA和LB分别表示两集合A和B,要求新集合A=A并B.
线性表LA=(3,5,8,11),LB=(2,6,8,9,11,15,20),LA和LB代表两个集合A.B,
已知两个顺序表A和B分别表示两个集合,其元素递增排列,编写一个函数求出A和B的交集
数据结构假设分别以两个元素的值递增有序线性表a,b表示两个集合,现在要构成一个新的线性表c,c表示a b的交,且c中的元
用c++实现,假设有两个元素递增的有序排列线性表A和B,均以顺序表作存储结构.试编写算法将A表和B表归并成一个按元素值递
两根小木棒a和b,他们的正投影的长分别为la和lb,若la大于lb,则他们的长度ha和hb满足什么?
数据结构算法2.1两个线性表LA和LB,求新的集合那个,C语言版完整程序怎么写啊
正方体物块a和b是用同一种材料制造的,它们的边长分别为la,lb,并且lb=2la现在将物块a放在b的上面的中央,物块b
如图所示,正方体物体A和B是同一种材料制成的,它们的边长分别为LA、 LB,并且LB=2LA,将物快A放在物快B的上面的