题目:从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; }