利用向量实现集合的交于并,可以帮我挑挑错或者给我一份正确源代码吗?

#ifndef-Vector-H

enum boolean {FALSE,TRUE};

typedef enum boolean Bool;

typedef  int  ElementType ;

struct vector

{

ElementType *elements;

int ArraySize;

int VectorLength;

};

typedef struct vector Vector;


void GetArray(Vector*);

void InitVector(Vector*,int sz);

ElementType GetNode(Vector*v,int i);

void FreeVector(Vector*);

int Find(Vector*,ElementType);

Bool Remove(Vector*,int i);

#endif

以上是工程里的头文件





#include<Vector>


void GetArray(Vector *V)

{

V->element=(ElementType*)malloc(sizeof(ElementTyepe)*V->Arraysize);

if(V->element==NULL)

printf("Memory Allocation Error!\n");

}


void InitVector (Vector*V,int sz)  /*初始化一个数组,建立一个最大长度为sz的数组*/

{

if(sz<=0)

printf("当前没有可用大小\n");

else

{

V->ArraySize=sz;

v->VectorLength=0;

GetArray(V);

}

}


ElementType GetNode(Vector*V,int i)  /*取向量中的第i个节点,若存在,则返回该结点的值;否则返回NULL*/

{

return(i<0||i>=V->VectorLength)?NULL:V->elements[i];

}

void FreeVector(Vector*V) /*释放向量存储空间*/

{

free(V->elements);

int Find(Vector*V ElementType x)  /*查找值为x的的结点,若找到,则返回结点序号;否则返回-1*/


{

int i;

for (i=0;i<V->elements[i]==x)

if(V->elements[i]==x)

return i;

return -1;

}

void 

Bool Insert(Vector *V,ElementTypex,int i)   /*在向量第i个位置插入值为x的结点,成功返回TURE,否则返回FALSE*/

{

    int j;

if(V->VectorLength==V->ArraySize)

{


printf("向量储存空间已满\n");

return FALSE;

}

else

{

for(j=V->VectorLength-1;j>=i;j--)

V->elements[j+1]=V->elements[j];

V->element[i]=x;

V->VectorLength++;

return TURE;

}

}


Bool Remove(Vecor *V,int i)

{

int j;


if(V->VectorLength==0)

{

printf("向量为空\n")

return FALSE;

}

else if (i<0||i>V->VectorLength-1)

{

printf("删除位置错误\n");

return FALSE;

}

else 

for(j=i;j<V->VectorLength-1;j++)

V->elements[j]=V->elements[j+1];

V->VectorLength--;

return TURE;

}


Vector *Union(Vector *Va,Vector *Vb)

{

int m,n,i,j,k;

int x;

Vector *Vc=(Vector)malloc(sizeof(Vector));

n=Va->VectorLength;

m=Vb->VectorLength

InitVector(Vc,m+n);

j=0;

for(i=0;i<n;i++)

{x=GetNode(Va,i);

Insert(Vc,x,j);

j++;

}

for(i=0;i<m;i++)

{

  x=GetNode(Vb,i);

  k=Find(Va,x);


  if(k==-1)

  {

  Inseert(Vc,x,j);

  j++;

  }

}

return Vc;

}





Vector *Intersection(Vector *Va,Vector *Vb)

{

int m,n,i,k,j;

ElementType x;

Vector *Vc=(Vector *) malloc(sizef(Vector));

n=Va->VectorLength;

m=Vb->VectorLength;

InitVector(Vc,(m>n)?n:m);

i=0;

j=0;

while(i<m)

{

x=GetNode(Vb,i);

k=Find(Va,x);

if(k!=-1)

{Insert(Vc,x,j);j++;}

i++;

}

return Vc;

}



int main()

{

int m,n,i,j;

int x, z;

Vector *Va;

    Vector *Vb;

printf("输入第一个集合\n");

for(i,i<m,i++)

{

scanf("%d",&x);

   Insert(Vector *Va,x, i);

}

printf("输入第二个集合\n");

for(j,j<n,j++)

{

scanf("%d",&x);

   Insert( *Vb,x, j)

}


Vc=Union( *Va,*Vb) //集合的并

InitVector(*Vc, z)

InitVector(Vc,m+n);

printf("集合的并\n");

for(i=0,i<z,i++)

printf("%d",Vc->element[i]);

    Vc=Intersection(*Va, *Vb) //集合的交

InitVector( *Vc, z)

InitVector (Vc,(m>n)?n:m);

printf("集合的交\n"); 

    printf("%d",Vc->element[i]);

return 0;


}

这是cpp里的代码

weibo_毛豆小小婷_04185051
浏览 1440回答 0
0回答
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

数据结构