C++实现顺序表与链表
一、顺序表
之前已经对顺序表有了了解,需要注意的是读者如果疑惑以下代码没有实现头插与头删,是因为代码中任意插入与删除这两个函数可以实现此功能。下面有测试代码,读者也可以自行测试
。
代码如下:
#include<iostream>
using namespace std;
#include<assert.h>
typedef int DataType;
class SeqList
{
public:
//构造函数
SeqList()
: _array(new DataType[3])
, _capacity(3)
, _size(0)
{}
//带参数的构造函数
SeqList(DataType *array, size_t size)
: _array(new DataType[size])
, _capacity(size)
, _size(size)
{
for (size_t i = 0; i < size; ++i)
_array[i] = array[i];
}
//拷贝构造函数
SeqList(const SeqList& s)
:_array(new DataType[s._capacity])
, _capacity(s._capacity)
, _size(s._size)
{
for (size_t i = 0; i < s._size; ++i)
_array[i] = s._array[i];
}
//运算符=重载
SeqList& operator=(const SeqList& s)
{
DataType *tmp = new DataType[s._capacity];
memcpy(tmp, s._array, s._size);
delete[] _array;
_array = tmp;
_capacity = s._capacity;
_size = s._size;
}
~SeqList()
{
if (_array)
{
delete[] _array;
_size = 0;
_capacity = 0;
}
}
void PushBack(int data)
{
_CheckCapacity();
_array[_size] = data;
_size++;
}
void PopBack()
{
_size--;
}
void Insert(size_t pos, DataType data)
{
_CheckCapacity();
size_t end = _size;
while (end >= pos)
{
_array[end] = _array[end - 1];
end--;
}
_array[p