typedef int DataType;
#define DEFAULT_SZ 3
class SeqList
{
public:
SeqList()
{
_array = (DataType*)malloc(sizeof(DataType)*DEFAULT_SZ);
_size = 0;
_capacity = DEFAULT_SZ;
memset(_array,0,DEFAULT_SZ*sizeof(DataType));
}
SeqList(SeqList& s)
{
_array = (DataType*)malloc(s._capacity*sizeof(DataType));
Swap(s);
}
SeqList& operator=(SeqList s)
{
Swap(s);
return *this;
}
~SeqList()
{
free(_array);
_array = NULL;
_capacity = 0;
_size = 0;
}
public:
void Swap(SeqList& s)
{
_capacity = s._capacity;
_size = s._size;
for(int i=0; i<(int)_size; i++)
{
_array[i] = s._array[i];
}
}
void PushBack(DataType x)
{
int ret = 0;
ret = CheckCapcacity();
if(ret == 1)
{
_array[_size] = x;
_size++;
}
}
void PopBack()
{
if(_size==0)
{
return;
}
_size--;
}
void PushFront(DataType x)
{
int ret = 0;
ret = CheckCapcacity();
if (ret == 1)
{
int end = (int)_size;
for(int i=end; i>0; i--)
{
_array[i] = _array[i-1];
}
}
_array[0] = x;
_size++;
}
void PopFront()
{
if(_size==0)
{
return;
}
else if(_size==1)
{
_size = 0;
return;
}
for(int i=1; i<(int)_size; i++)
{
_array[i-1] = _array[i];
}
_size--;
}
void Insert(size_t pos, DataType x)
{
int ret = 0;
ret = CheckCapcacity();
if(ret == 1)
{
if(pos!=0)
{
int end = (int)_size;
for(int i=end; i>(int)pos; i--)
{
_array[i] = _array[i-1];
}
_array[pos] = x;
}
else
{
PushFront(x);
}
_size++;
}
}
void Erase(size_t pos)
{
if (_size==0)
{
return;
}
int end = (int)_size;
for(int i=(int)pos; i<(end-1); i++)
{
_array[i] = _array[i+1];
}
_size--;
}
DataType& operator[](size_t pos)
{
return _array[pos];
}
int CheckCapcacity()
{
DataType* tmp = _array;
if(_size >= _capacity)
{
_array = (DataType*)realloc(_array,sizeof(DataType)*(_capacity+=DEFAULT_SZ));
_capacity += DEFAULT_SZ;
if(_array == NULL)
{
_array = tmp;
return -1;
}
}
return 1;
}
void Print()
{
if(_size!=0)
{
for(int i=0; i<(int)_size; i++)
{
cout<<_array[i]<<"->";
}
}
cout<<"over"<<endl;
}
private:
DataType* _array;
size_t _size;
size_t _capacity;
};