您的位置:首页 > 编程语言 > C语言/C++

利用C++类实现顺序表

2016-06-03 13:15 393 查看
以前写过用C语言实现的顺序表,现在来看看用C++类实现的吧class SeqList
{
public:
SeqList(int capacity=DEFAULT_CAPACITY)
:_capacity(capacity)
,_size(0)
,_pData(0)
{
_pData=new DataType[_capacity];
}

~SeqList()
{
if(_pData!=NULL)
{
delete[] _pData;
}
}

SeqList(const SeqList& s)
:_size(s._size)
,_capacity(s._capacity)
{
_pData=new DataType[_capacity];
memcpy(_pData,s._pData,_size*sizeof(DataType));
}

SeqList& operator=(const SeqList& s)
{
if(this != &s)
{
delete[] _pData;
_pData=new DataType[s._capacity];
memcpy(_pData,s._pData,s._size*sizeof(DataType));
_size=s._size;
_capacity=s._capacity;
}
return *this;
}

void PushBack(const DataType& d)
{
_CheckCapacity();
_pData[_size++]=d;
}

void PushFront(const DataType& d)
{
_CheckCapacity();
int start=_size-1;
while(start>=0)
{
_pData[start+1]=_pData[start];
start--;
}
_pData[0]=d;
_size++;
}

void PopBack()
{
if(_pData!=NULL)
{
_pData[_size--];
}
}

void PopFront()
{
if(_pData!=NULL)
{
for(int i=0; i<_size-1; i++)
{
_pData[i]=_pData[i+1];
}
_size--;
}
}

DataType& operator[](int index)
{
return ( _pData[index]);
}

int Find( const DataType& d)
{
int i=0;
for(i=0; i<_size-1; i++ )
{
if(_pData[i]==d)
{
return i;
}
}
return -1;
}

void Insert(int pos,const DataType& d)
{
assert(pos>=0 && pos<_size);
int move=_size-pos;
int end=_size;
_CheckCapacity();
while(move--)
{
_pData[end]=_pData[end-1];
end--;
}
_pData[pos]=d;
_size++;
}

void Remove(const DataType& d)
{
int pos=Find(d);
int i=0;
if(pos!=-1)
{
for(i=pos; i<_size-1; i++)
{
_pData[i]=_pData[i+1];
}
_size--;
}
}

void Reverse()
{
int left=0;
int right=_size-1;
while(left<right)
{
DataType tmp=_pData[left];
_pData[left]=_pData[right];
_pData[right]=tmp;
left++;
right--;
}
}

friend ostream& operator<<(ostream& os,const SeqList& s);

private:
int _capacity; //线性表容量
int _size;    //所含数据个数
DataType *_pData;
void _CheckCapacity()
{
if(_size==_capacity)
{
DataType *tmp=new DataType[_capacity+DEFAULT_CAPACITY ];
memcpy(tmp,_pData,_size*sizeof(DataType));
delete[] _pData;
_pData=tmp;
_capacity=_capacity+DEFAULT_CAPACITY ;
}
}

};

ostream& operator<<(ostream& os,const SeqList& s)
{
int i=0;
for(i=0; i<s._size; i++)
{
os<<s._pData[i]<<' ';
}
os<<endl;
 return os;
}

本文出自 “七月朔风” 博客,请务必保留此出处http://luminous.blog.51cto.com/10797288/1750291
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: