/* 例2-1:A=AUB */
#include<iostream>
#define ASIZE 5 //宏定义A集合的元素个数#define BSIZE 6 //宏定义B集合的元素个数
using namespace std;
int main()
{
int m=0,n=0;
char A[ASIZE+BSIZE]={'a','s','1','2','q'},B[BSIZE]={'s','2','x','c','5','Y'};//A集合和B集合的元素
for(int i=0;i<BSIZE;++i)
{
for(int j=0;j<ASIZE+n;++j) //B集合的元素依次与A集合的元素比较
{
if(B[i]!=A[j]) //若不同则系数m加一
++m;
if(m==ASIZE+n) //若与A集合所有的元素都不相同则将B集合中的该元素添加到A集合
{
A[ASIZE+n]=B[i];
++n;
}
}
m=0;
}
for(i=0;i<ASIZE+n;++i)
cout<<"A"<<"["<<i<<"]"<<A[i]<<endl;
cout<<"B集合和A集合不同的元素个数为:"<<n<<endl;
return 0;
}
/*例2-2:归并排序*/
#include<iostream>
#define ASIZE 4 //宏定义A的元素个数
#define BSIZE 7 //宏定义B的元素个数
#define CSIZE ASIZE+BSIZE //宏定义C的元素个数为A和B的元素个数的总和
using namespace std;
int main()
{
int *p1,*p2,i=0,j=0,k=0; //定义指针及参数
int A[ASIZE]={3,5,8,11},B[BSIZE]={2,6,8,9,11,15,20};
int C[CSIZE]={0}; //初始化C数组
while(i!=ASIZE&&j!=BSIZE) //当有一个数组内的值提取完时循环终止
{
p1=&A[i];
p2=&B[j];
if(*p1<=*p2) //若A[i]小于或等于B[j] 则将A[i]赋予C[k] 并将指针后移一位 C[k]的位置也后移一位
{
C[k]=*p1;
++i;
}
else //若A[i]大于B[j] 则将B[j]赋予C[k] 并将指针后移一位 C[k]的位置也后移一位
{
C[k]=*p2;
++j;
}
++k;
}
if(i==ASIZE) //让A先提取完 将B中剩余的元素依次放入C
for(;j<BSIZE;++j)
{
p2=&B[j];
C[k]=*p2;
++k;
}
else //若B先提取完 将A中剩余的元素依次放入C
for(;i<ASIZE;++i)
{
p1=&A[i];
C[k]=*p1;
++i;
++k;
}
for(i=0;i<CSIZE;++i)
cout<<"C"<<"["<<i<<"]= "<<C[i]<<endl;
return 0;
}