数据结构习题——7-2 求集合交集 (20分)

顺序表的类实现

#include <iostream>


using namespace std;
const int DefaultSize = 100;

class SeqList
{
protected:
    int* data;//指向动态内存分配数组的指针
    int maxSize;//动态内存分配数组的大小
    int last;//标识顺序表中最后一个元素的位置
public:
    SeqList(int sz = DefaultSize)
    {
        if (sz > 0)
        {
            maxSize = sz;
            data = new int[maxSize];
            last = -1;
            if (data == NULL)
            {
                cerr << "存储分配错误" << endl;
                exit(1);
            }
        }

    }//构造函数
    ~SeqList()
    {
        last = -1;
        maxSize = 0;
        delete[]data;
        data = NULL;
    }//析构函数
    int getData(int i)const;  
    int Length() const;//返回顺序表中元素的个数
    int Search(int& x) const;//在顺序表中搜索x
    bool GetData(int i, int& x) const;//获取顺序表中第i个位置的元素
    bool Remove(int i, int& x);//删除顺序表第i个位置的元素
    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++)
        {
            out << L.data[i];
        }
        return out;
        //逆置顺序表中的元素
    };

    void input(int newSize);
    void output();
};


int SeqList::getData(int i)const
{
    return data[i];
}
int SeqList::Length() const
{
    return last + 1;

}
int SeqList::Search(int& x)const
{
    int i;
    for (i = 0; i <= last; i++)
        if (data[i] == x)
            return i + 1;
    return 0;
}

bool SeqList::GetData(int i, int& x) const
{
    if (i <= 0 && i >= last + 1)
        return false;
    x = data[i - 1];
    if (data[i - 1] == x)
        return true;
    else
        return false;

}
bool SeqList::Remove(int i, int& x)//移除顺序表
{
    if (last == -1)
        return false;
    if (i < 1 || i > last + 1)
        return false;
    x = data[i - 1];
    for (int j = i; j <= last; j++)
        data[j - 1] = data[j];
    last--;
    return true;
}


void SeqList::input(int newSize)//初始化顺序表
{
    int i;
    if (newSize <= 0 || newSize >= maxSize)
        exit(0);

    last = newSize - 1;

    for (i = 0; i <= last; i++)
        cin >> data[i];
}
void SeqList::output()//输出顺序表
{
    int i;
    if (last <= 0)
        exit(0);
    for (i = 0; i <= last - 1; i++)
    {
        cout << data[i] << " ";
    }
    cout << data[i];
}

主函数实现

int main()
{
    SeqList a, b;
    int sizeA, sizeB;

    cin >> sizeA;
    cin >> sizeB;

    a.input(sizeA);
    b.input(sizeB);//初始化a和b

    int m = a.Length();
    int i = 1, k, x = 0;

    while (i <= m)
    {
        a.GetData(i, x);
        k = b.Search(x);
        if (k == 0)
        {
            a.Remove(i, x);
            m--;
        }
        else
            i++;
    }
    a.output();
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

努力的算算

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值