c++实现动态顺序表如下
typedef int DataType;
class SeqList
{
public:
//////////////类的基本成员函数定义/////////////////
SeqList() //构造函数(在类内定义)
:_elem(NULL)
, _capacity(0)
, _size(0)
{}
~SeqList()
{
if (_elem)
{
delete[] _elem;
cout << "~SeqList()" << endl;
}
}
SeqList(const SeqList& s)
:_elem(new DataType[s._capacity])
, _capacity(s._capacity)
, _size(s._size)
{
memcpy(_elem, s._elem, _size*sizeof(DataType));
}
SeqList& operator= (const SeqList& s)
{
if (this != &s)
{
delete[] _elem;
_elem = new DataType[s._capacity];
memcpy(_elem, s._elem, s._size*sizeof(DataType));
_size = s._size;
_capacity = s._capacity;
}
return *this;
}
void _CheckCapacity();
void _PrintSeqList();
void _PushBack(DataType data);
void _PopBack();
size_t Find(DataType data);
void Insert(size_t index,DataType data);
private:
DataType* _elem;
size_t _capacity;
size_t _size;
};
类外定义成员函数如下:
void SeqList::_CheckCapacity()
{
if (_size == _capacity)
{
_capacity = _capacity * 2 + 5;
DataType* ret = (DataType*)malloc(_capacity*sizeof(DataType));
memcpy(ret, _elem, _size*sizeof(DataType));
delete[] _elem;
_elem = ret;
}
}
void SeqList::_PrintSeqList()
{
cout << "SeqList : ";
size_t index = 0;
for (; index < _size; index++)
{
cout << _elem[index] << " ";
}
cout << "NULL" << endl;
}
void SeqList::_PushBack(DataType data)
{
_CheckCapacity();
_elem[_size++] = data;
}
void SeqList::_PopBack()
{
if (_size == 0)
{
cout << "SeqList Is Empty" << endl;
return;
}
_size--;
}
size_t SeqList::Find(DataType data)
{
size_t index = 0;
for (; index < _size; index++)
{
if (_elem[index] == data)
{