PTA 7-2 求集合交集 (20 分)

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//在顺序表中搜索x
      {
          for(int i=0;i<=last;i++)
          {
              if(data[i]==x)
              {
                  return i+1;
              }
          }
          return 0;
      }
      virtual int Locate(int i) const//检验顺序表中是否存在第i个元素
      {
          if(i>last+1)
            return false;
          return true;
      }
      virtual bool GetData(int i, T& x) const//获取顺序表中第i个位置的元素
      {
          if(Locate(i-1))
          {
              x=data[i-1];
              return true;
          }
            return false;
      }
      virtual void SetData(int i, T& x)//将顺序表中第i个位置的元素赋值为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) //在顺序表的第i个元素的位置插入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) //删除顺序表第i个位置的元素
      {
          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;
      }
 /*     void Reverse ()//逆置顺序表中的元素
      {
          for(int i=0;i<=last/2;i++)
          {
              int temp;
              temp=data[i];
              data[i]=data[last-i];
              data[last-i]=temp;
          }
      }*/
};
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]<<" ";
      }
}
  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值