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

顺序表(C++实现)

2016-02-29 21:54 459 查看
顺序表是基本的数据结构,创建Seqlist类,主要包括类的默认成员函数(构造函数、析构函数、赋值运算符重载),顺序表的基本功能实现。

//顺序表
typedef int DataType;

class Seqlist
{
public:
Seqlist()      //无参构造函数
:_array(NULL)
,_size(0)
,_capacity(0)
{ }

~Seqlist()    //析构函数
{
if (_array)
{
delete[] _array;
}
}

//深拷贝
Seqlist(const Seqlist & s)     //拷贝构造函数
:_array(new DataType[s._size])
, _size(s._size)
, _capacity(s._size)
{
memcpy(_array, s._array, sizeof(DataType)*(_size));    //内存拷贝
}

Seqlist & operator=(const Seqlist & s)     //赋值运算符重载
{
if (this != &s)     //考虑自己给自己赋值的情况
{
DataType * tmp = new DataType[s._size];
delete[] _array;

_array = tmp;
_size = s._size;
_capacity = s._size;
memcpy(_array, s._array, sizeof(DataType)*(_size));
}
return *this;
}

public:
void PushBack(DataType x)     //尾插
{
check_capacity();
_array[_size++] = x;
}

void PopBack()      //尾删
{
if(_size)
{
_array[_size] = NULL;
_size--;
}
}

void PushFront(DataType x)    //头插
{
check_capacity();
for (int i = 0; i < _size; i++)
{
_array[_size - i] = _array[_size - 1 - i];
}
_array[0] = x;
_size++;
}

void PopFront()     //头删
{
if(_size)
{
for (int i = 0; i < _size; i++)
{
_array[i] = _array[i + 1];
}
_size--;
}
}

void Insert(size_t pos, DataType x)    //任何位置插入
{
check_capacity();
if ((pos < 1) || (pos > _size))
{
return;
}
else
{
for (int i = 0; i < pos; i++)
{
_array[_size + 1 - i] = _array[_size - i];
}
_array[pos + 1] = x;
}
_size++;
}

void Erase(size_t pos)    //删除pos位置的数据
{
assert(pos);
for (int i = pos; i < _size; i++)
{
_array[i-1] = _array[i];
}
_size--;
}

int Find(DataType x)    //查找
{
int i = 0;
while ((i < _size) && (x != _array[i]))
{
i++;
}
if (i < _size)
{
return i + 1;
}
else
{
return 0;
}
}

void PrintSeqlist()     //格式化输出
{
for (int i = 0; i < _size; i++)
{
cout << _array[i] << " ";
}
cout << endl;
}

private:
void check_capacity()
{
if (_size >= _capacity)
{
_capacity = _capacity + 2;
//2是为了防止开始容量为0,便于增容,也可以开始开辟一部分空间
_array = (DataType *)realloc(_array, _capacity*(sizeof(DataType)));
}
}
private:
DataType * _array;   //数组
size_t _size;    //有限个数
size_t _capacity;    //容量
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  C++ 构造函数 顺序表