#pragma once
#include<iostream>
#include<malloc.h>
using namespace std;
typedef int DataType;
class SList
{
public:
SList() :_p(NULL), _size(0), _capcity(0)
{
};
SList(SList & s)
{
if (s._p == NULL)
return;
DataType *tmp = new DataType[s._size];
_p = tmp;
memcpy(_p, s._p, s._size*sizeof(DataType));
_size = s._size;
_capcity = _size;
}
SList& operator=(const SList &s)
{
if (&s != this)
{
DataType *tmp = new DataType[s._size];
memcpy(tmp, s._p,s._size);
delete[]_p;
_p = tmp;
_size = s._size;
_capcity = s._capcity;
}
return *this;
}
~SList()
{
if (_p)
{
delete[]_p;
}
}
void UpdateCup()
{
_capcity = 2 * _capcity + 3;
_p = (DataType *)realloc(_p, (sizeof(DataType)*_capcity));
}
void PushBack(DataType x)
{
if (_size >= _capcity)
{
UpdateCup();
}
_p[_size] = x;
++_size;
}
void PopBack()
{
if (_size <= 0)
return;
--_size;
}
void PrintSlist()
{
for (int i = 0; i < _size; ++i)
{
cout << _p[i] << "->";
}
cout << "NULL"<<endl;
}
void Insert(size_t pos,DataType x)
{
if (pos<0 && pos>_size)
return;
if (_size >= _capcity)
{
UpdateCup();
}
++_size;
for (int i = _size; i > pos; i--)
{
_p[i] = _p[i - 1];
}
_p[pos] = x;
}
private:
DataType *_p;
size_t _size;
size_t _capcity;
};