PTA 7-2 求集合交集 (20 分)
#include <iostream>
#include <cassert>
#include <cstdlib>
#include <ctime>
using namespace std;
typedef int T;
const int defaultSize = 100;
class SeqList
{
private:
T* data;
int maxSize;
int last;
void Resize(int newSize)
{
maxSize=newSize;
}
public:
SeqList(int sz=defaultSize)
{
last=sz-1;
data=new T[sz];
maxSize=defaultSize;
}
SeqList(const SeqList& L)
{
maxSize=L.maxSize;
last=L.last;
for(int i=0;i<last;i++)
{
data[i]=L.data[i];
}
}
SeqList& operator=(const SeqList& L)
{
maxSize=L.maxSize;
last=L.last;
for(int i=0;i<last;i++)
{
data[i]=L.data[i];
}
return *this;
}
~SeqList()
{
delete []data;
last=0;
}
virtual int Size() const
{
return maxSize;
}
virtual int Length() const
{
return last+1;
}
virtual int Search(T & x) const
{
for(int i=0;i<=last;i++)
{
if(data[i]==x)
{
return i+1;
}
}
return 0;
}
virtual int Locate(int i) const
{
if(i>last+1)
return false;
return true;
}
virtual bool GetData(int i, T& x) const
{
if(Locate(i-1))
{
x=data[i-1];
return true;
}
return false;
}
virtual void SetData(int i, T& x)
{
if(Locate(i-1))
{
data[i-1]=x;
}
}
virtual bool IsEmpty() const
{
return last==0;
}
virtual bool IsFull() const
{
return last==maxSize;
}
virtual bool Insert(int i, const T& x)
{
if(i<=last+2)
{
int j;
for( j=last+1;j>=i;j--)
{
data[j]=data[j-1];
}
data[j]=x;
last++;
return true;
}
return false;
}
virtual bool Remove(int i, T&x)
{
if(Locate(i))
{
for(int j=i-1;j<last;j++)
{
data[j]=data[j+1];
}
last--;
return true;
}
return false;
}
virtual void Sort()
{
for(int i=0;i<last;i++)
{
for(int j=i;j<=last;j++)
{
if(data[i]>data[j])
{
T temp;
temp=data[i];
data[i]=data[j];
data[j]=temp;
}
}
}
}
friend istream& operator>>(istream& in, SeqList & L)
{
int i;
for(i=0;i<=L.last;i++)
{
in>>L.data[i];
}
return in;
}
friend ostream& operator<<(ostream& out, const SeqList& L)
{
int i;
for(i=0;i<=L.last;i++)
{
if(i==L.last)
{
out<<L.data[i];
}
else
out<<L.data[i]<<" ";
}
return out;
}
};
int main()
{
int a1,a2,*a,c=0;
int num=(a1>a2)?a1:a2;
a=new int[num];
cin>>a1>>a2;
SeqList sList1(a1),sList2(a2);
cin>>sList1;
cin>>sList2;
for(int i=0;i<a1;i++)
{
int x;
sList1.GetData(i+1,x);
if(sList2.Search(x))
{
a[c++]=x;
}
}
for(int i=0;i<c;i++)
{
if(i==c-1){cout<<a[i]<<endl;}
else cout<<a[i]<<" ";
}
}