题目:从input.txt中读取数组A,B,C,采用线性表输出A∪(B - C)的集合
#include<iostream.h>
#include<fstream.h>
#include<malloc.h>
#include<process.h>
#define LIST_INIT_SIZE 10 //线性表空间初始分配量
#define LISTINCREMENT 2 //线性表空间的分配增量
typedef int ElemType;
typedef int Status;
struct Sqlist
{
ElemType *elem; //表首地址
int length; //表长度
int listsize; //当前分配的存储容量
};
/*求线性表的长度*/
int ListLength(Sqlist L)
{
return L.length;
}
/*返回线性表L的第i个数据元素的值,存储在e中*/
Status GetElem(Sqlist L,int i ,ElemType &e)
{
if(i<1||i>L.length)
{
exit(0);
}
e=*(L.elem+i-1);
return 1;
}
/*初始化线性表L*/
Status InitList(Sqlist &L)
{
L.elem=(ElemType*)malloc(LIST_INIT_SIZE*sizeof(ElemType)); //分配存储空间
if(!L.elem)
{
exit(0);
}
L.length=0; //初始化长度
L.listsize=LIST_INIT_SIZE; //初始化存储容量
return 1;
}
/*删除线性表L的第i个元素*/
Status ListDelete(Sqlist &L,int i)
{
ElemType *p,*q;
if(i<1||i>L.length)
{
return 0;
}
p=L.elem+i-1;
q=L.elem+L.length-1;
for(++p;p<=q;++p)
{
*(p-1)=*p;
}
L.length--;
return 1;
}
/*在线性表的第i个位置插入e*/
Status ListInsert(Sqlist &L,int i,ElemType e)
{
ElemType *newbase,*q,*p;
if(i<1||i>L.length+1)
return 0;
if(L.length>=L.listsize)
{
if(!(newbase=(ElemType*)realloc(L.elem,(L.listsize+LISTINCREMENT)*sizeof(ElemType))))
{
exit(0);
}
L.elem=newbase;
L.listsize+=LISTINCREMENT;
}
q=L.elem+i-1;
for(p=L.elem+L.length-1;p>=q;--p)
{
*(p+1)=*p;
}
*q=e;
++L.length;
return 1;
}
/*计算A∪(B - C)函数*/
int Calucate(Sqlist Array_a,Sqlist Array_b,Sqlist &Array_c)
{
int Len_a,Len_b,Len_c;
ElemType e1,e2;
int m=1,n=1,k=0;
Len_a=ListLength(Array_a);
Len_b=ListLength(Array_b);
Len_c=ListLength(Array_c);
for(int i=0;i<Len_b;i++) //(B-C)算法,存储在Array_b中
{
for(int j=0;j<Len_c;j++)
{
if(*(Array_b.elem+i)==*(Array_c.elem+j))
{
ListDelete(Array_b,i+1);
}
}
}
Len_b=Array_b.length; //Array_b的新长度
InitList(Array_c); //再次初始化Array_c,存储最后结果
while((m<=Len_a)&&(n<=Len_b)) //A∪B算法
{
GetElem(Array_a,m,e1);
GetElem(Array_b,n,e2);
if(e1<=e2)
{
ListInsert(Array_c,++k,e1);
++m;
if(e1==e2) n++; //两个相等的值比较的情况
}
else
{
ListInsert(Array_c,++k,e2);
++n;
}
}
while(m<=Len_a) //剩余的数直接插入
{
GetElem(Array_a,m++,e1);
ListInsert(Array_c,++k,e1);
}
while(n<=Len_b)
{
GetElem(Array_b,n++,e2);
ListInsert(Array_c,++k,e2);
}
cout<<"the count of numbers:";
cout<<Array_c.length<<endl;
cout<<"the number:";
for(int i1=0;i1<Array_c.length;i1++)
{
cout<<*(Array_c.elem+i1);
cout<<" ";
}
cout<<endl;
return 0;
}
int main()
{
int a[256];
Sqlist Array_a,Array_b,Array_c;
ifstream infi("input.txt",ios::in);//读取当前目录下的input.txt
for(int i=0;!infi.eof();i++)//存放于a[i]中
{
infi>>a[i];
}
infi.close();
Status st;
st=InitList(Array_a); //Array_a
if(st==1)
{
for(int j=1;j<=a[0];j++)
{
st=ListInsert(Array_a,j,a[j+2]);
}
}
st=InitList(Array_b); //Array_b
if(st==1)
{
for(int j=1;j<=a[1];j++)
{
st=ListInsert(Array_b,j,a[j+2+a[0]]);
}
}
st=InitList(Array_c); //Array_c
if(st==1)
{
for(int j=1;j<=a[2];j++)
{
st=ListInsert(Array_c,j,a[j+2+a[0]+a[1]]);
}
}
Calucate(Array_a,Array_b,Array_c); //调用计算函数
return 0;
}