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

c++实现顺序表

2017-07-27 22:49 411 查看
//c++实现顺序表
#include<iostream>
#include<stdlib.h>
#include<assert.h>
typedef int DataType;
using namespace std;
class SeqList
{
public:
SeqList(size_t size=0,size_t capatity=3,DataType* pData=NULL)
:_size(size)
,_capatity(size+1)
{
_pData=new DataType[_capatity*sizeof(DataType)];
for(DataType indx=0;indx<size;indx++)
{
_pData[indx]=pData[indx];
}
}
SeqList(const SeqList&s)
:_size(s._size)
,_capatity(s._capatity)
{
_pData=new DataType[_capatity*sizeof(DataType)];
for(int indx=0;indx<s._size;indx++)
{
_pData[indx]=s._pData[indx];
}
}
void Display()
{
for(int indx=0;indx<_size;indx++)
{
cout<<_pData[indx]<<" ";
}
cout<<endl;
}
~SeqList()
{
delete[] _pData;
_pData=NULL;
}
public:
void Pushback(DataType data)
{
if(_size==_capatity)
{
Checkcapatity(_capatity*2);
}
_pData[_size++]=data;
}
void Popback()
{
if(--_capatity)
{
_pData[_size--];
}
if(_size==0)
{
cout<<"NULL";
}
}
void PushFront(DataType data)
{
Checkcapatity(_size);
for(int indx=_size-1;indx>=0;indx++)
{
_pData[indx+1]=_pData[indx];
}
_pData[0]=data;
_size++;
}
void PopFront()
{
if(_size<=0)
{
cout<<"NULL";
return;
}
else
{
for(int indx=0;indx<_size;indx++)
{
_pData[indx]=_pData[indx+1];
}
--_size;
}
}
void Insert(size_t pos,DataType data)
{
if(pos==0)
{
Pushback(data);
}
else
{   int end=_size;
for(int indx=end-1;indx>=pos;indx--)
{
_pData[indx+1]=_pData[indx];
}
}
++_size;
}
void Erase(DataType data)
{
int count=0;
for(int indx=0;indx<_size;indx++)
{
if(_pData[indx]==data)
{
count++;
}
else
{
_pData[indx-count]=_pData[indx];
}
_size-=count;
}
}
int Find(DataType data)
{
for(int indx=0;indx<_size;indx++)
{
if(_pData[indx]==data)
{
return indx;
}
}
return -1;
}
void Checkcapatity(size_t size)
{
if(size>=_capatity)
{
_pData=(DataType*)realloc(_pData,size*sizeof(DataType)+1);
assert(_pData);
_capatity=size;
}
}
private:
size_t _size;
size_t _capatity;
DataType* _pData;
};
void main()
{
int arr[9]={1,2,3,4,5,6,7,8,9};
SeqList s1(9,10,arr);
SeqList s2(s1);
s1.Pushback(10);
s1.Display();
s2.Display();

system("pause");
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: