#ifndef-Vector-Henum 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) ?/*初始化一個數(shù)組,建立一個最大長度為sz的數(shù)組*/{ if(sz<=0) printf("當(dāng)前沒有可用大小\n"); else { V->ArraySize=sz; v->VectorLength=0; GetArray(V); }}ElementType GetNode(Vector*V,int i) ?/*取向量中的第i個節(jié)點(diǎn),若存在,則返回該結(jié)點(diǎn)的值;否則返回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的的結(jié)點(diǎn),若找到,則返回結(jié)點(diǎn)序號;否則返回-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的結(jié)點(diǎn),成功返回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里的代碼
利用向量實(shí)現(xiàn)集合的交于并,可以幫我挑挑錯或者給我一份正確源代碼嗎?
weibo_毛豆小小婷_04185051
2016-10-17 21:45:22