实现代码:
typedef int DataType;
class SeqList
{
private:
DataType* _a;
size_t _size;
size_t _capacity;
void CheckCapcacity()
{
if (_size == _capacity)
{
size_t NewCapacity = _capacity ? _capacity * 2 : 3;
_a = (DataType*)realloc(_a, NewCapacity*sizeof(DataType));
assert(_a);
_capacity = NewCapacity;
}
}
public:
SeqList()
:_a(NULL)
, _size(0)
, _capacity(0)
{}
SeqList(const SeqList& s)
{
_a = (DataType*)malloc(s._size*sizeof(DataType));
memcpy(_a, s._a, sizeof(DataType)*s._size);
_size = s._size;
_capacity = s._capacity;
}
/*SeqList& operator=(const SeqList& s)
{
if (this != &s)
{
free(_a);
_a = (DataType*)malloc(s._size*sizeof(DataType));
memcpy(_a, s._a, sizeof(DataType)*s._size);
_size = s._size;
_capacity = s._capacity;
}
return *this;
}*/
SeqList& operator=(SeqList s)//若传引用会改变引用对象的值
{
swap(_a, s._a);
swap(_size, s._size);
swap(_capacity, s._capacity);
return *this;
}
~SeqList()
{
if (_a)
{
free (_a);
_a = NULL;
}
}
void PushBack(DataType x)
{
CheckCapcacity();
_a[_size++] = x;
}
void PopBack()
{
if (_size > 0)
{
_size--;
}
else
{
cout << "顺序表为空" << endl;
}
}
void PushFront(DataType x)
{
/*CheckCapcacity();
DataType end = (DataType)_size;
for (; end >= 0;--end)
{
_a[end + 1] = _a[end];
}
_a[0] = x;
_size++;*/
Insert(0, x);
}
void PopFront()
{
Erase(0);
/*if (_size > 0)
{
DataType i = 0;
for (; i < (int)_size;i++)
{
_a[i] = _a[i+1];
}
_size--;
}
else
{
cout << "顺序表为空" << endl;
}*/
}
void Insert(size_t pos, DataType x)
{
CheckCapcacity();
if (pos<0 || pos>_size)
{
return;
}
DataType end = (DataType)_size-1;
for (; end >=(DataType)pos; end--)
{
_a[end+1] = _a[end];
}
_a[pos] = x;
_size++;
}
void Erase(size_t pos)
{
if (_size > 0)
{
if (pos<0 || pos>_size)
{
return;
}
else
{
DataType i = (DataType)pos;
for (; i < (DataType)_size; i++)
{
_a[i] = _a[i + 1];
}
_size--;
}
}
else
{
cout << "顺序表为空" << endl;
}
}
DataType& operator[](size_t pos)
{
assert(pos < _size);
return _a[pos];
}
void Print()
{
if (_size)
{
DataType i = 0;
for (i = 0; i < (int)_size; i++)
{
cout << _a[i] << " ";
}
cout << endl;
}
else
{
cout << "顺序表为空" << endl;
}
}
};
测试代码:
#include"Seqlist.h"
void Test()
{
SeqList s1;
s1.PushBack(1);
s1.PushBack(2);
s1.PushBack(3);
s1.PushBack(4);
s1.Print();
//s1.Insert(2, 6);
//s1.Print();
/*s1.PushFront(1);
s1.PushFront(2);
s1.PushFront(3);
s1.PushFront(4);
s1.Print();*/
/*s1.Erase(1);
s1.Print();*/
s1.PopFront();
s1.Print();
/*s1.PopBack();
s1.PopBack();
s1.PopBack();
s1.PopBack();
s1.Print();
*/
/*SeqList s2(s1);
s2.Print();
SeqList s3;
s3 = s1;
s3.Print();*/
}
int main()
{
Test();
system("pause");
return 0;
}