利用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
{
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
相关文章推荐
- 利用C++日期类实现简单的日期计算器
- C++入门小程序练习
- c语言通用平台des加密算法
- iOS复习OC语言 NSString与NSArray 使用
- 简单总结C语言中的运算符优先级
- C语言运算符及其优先级汇总表口诀
- C语言运算符优先级列表(超详细)
- C++ STL 基础及应用(5) 字符串
- C语言的指针(进阶篇章之二)
- 非托管C++通过C++/CLI包装调用C# DLL
- C++面试笔记_1
- c语言 sqlite3数据库模块
- C++ 类的静态成员详细讲解
- 【C++错误检查】binary '>>' :
- c++ 修改内存
- c++ int to byte
- windows下C语言多线程编程
- vs添加lib等依赖项
- C++的强制类型转换
- 用C语言实现Ping命令