#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里的代码
相关分类