顺序表的类实现
#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;
}