版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wuxinrenping/article/details/80094638
#include<iostream>
using namespace std;
#include<assert.h>
typedef int DataType;
class SeqList
{
public:
SeqList(size_t capacity = 10) //给容量一个缺省值10 构造函数
:_array(new DataType[sizeof(DataType)*capacity])
, _capacity(capacity)
, _size(0)
{
}
SeqList(const SeqList& s) 拷贝构造函数
:_array(new DataType[s._size]) //保证每块的数据内存地址不一样
{
memcpy(_array, s._array, s._size * 4);
_capacity = s._capacity;
_size = s._size;
}
SeqList& operator=(const SeqList& s) 赋值运算符重载
{
if (this != &s)
{
DataType *tmp = new DataType[s._size];
memcpy(tmp, s._array, s._size * 4);
delete[]_array;
_array = tmp;
_capacity = s._capacity;
_size = s._size;
}
return *this;
}
~SeqList() 析构函数
{
if (_array)
{
delete[]_array;
_array = NULL;
}
}
void PushBack(DataType data) 尾插
{
if (CheckCapacity()) //检查是否需要扩容
{
_array[_size++] = data;
}
}
void PopBack() 尾删
{
if (Empty()) //链表是否为空
{
return;
}
if (_size > 0)
{
_size--;
}
}
void Insert(size_t pos, DataType data) 在pos的位置插入data元素
{
size_t i;
i = _size;
if (CheckCapacity())
{
if (pos == _size )
{
PushBack(data);
return;
}
else
{
for (i; i >pos ; --i)
{
_array[i] = _array[i - 1];
}
_array[pos] = data;
_size++;
}
}
}
void Erase(size_t pos) 删除pos位置的元素
{
if (Empty())
{
return;
}
if (pos == _size -1)
{
PopBack();
return;
}
else
{
size_t i = pos+1;
for (i; i < _size; ++i)
{
_array[i - 1] = _array[i];
}
_size--;
}
}
int Size()const 计算顺序表的大小
{
return _size;
}
int Capacity()const 计算顺序表的容量
{
return _capacity;
}
bool Empty()const 顺序表的判空
{
return 0 == _size;
}
DataType& operator[](size_t index) []运算符的重载
{
assert(index >= 0 && index < _size);
return _array[index];
}
const DataType& operator[](size_t index)const
{
assert(index >= 0 && index < _size);
return _array[index];
}
private:
int CheckCapacity() 扩容操作
{
if (_size >= _capacity)
{
int newcapacity = 2 * _capacity;
DataType *tmp = new DataType[newcapacity];
memcpy(tmp, _array, _size * 4);
delete[]_array;
_array = tmp;
_capacity = newcapacity;
}
return 1;
}
DataType* _array;
size_t _size;
size_t _capacity;
int main()
{
SeqList s1(4);
s1.PushBack(1);
s1.PushBack(2);
s1.PushBack(3);
s1.PushBack(4);
s1.PushBack(5);
s1.PushBack(6);
s1.PopBack();
s1.PopBack();
s1.Insert(4, 7);
s1.Erase(4);
s1.Insert(2, 8);
s1.Erase(2);
s1.Size();
s1.Capacity();
SeqList s2(s1);
SeqList s3;
s3 = s1;
s1[0] = 9;
s1.PushBack(6);
return 0;
using namespace std;
#include<assert.h>
typedef int DataType;
class SeqList
{
public:
SeqList(size_t capacity = 10) //给容量一个缺省值10 构造函数
:_array(new DataType[sizeof(DataType)*capacity])
, _capacity(capacity)
, _size(0)
{
}
SeqList(const SeqList& s) 拷贝构造函数
:_array(new DataType[s._size]) //保证每块的数据内存地址不一样
{
memcpy(_array, s._array, s._size * 4);
_capacity = s._capacity;
_size = s._size;
}
SeqList& operator=(const SeqList& s) 赋值运算符重载
{
if (this != &s)
{
DataType *tmp = new DataType[s._size];
memcpy(tmp, s._array, s._size * 4);
delete[]_array;
_array = tmp;
_capacity = s._capacity;
_size = s._size;
}
return *this;
}
~SeqList() 析构函数
{
if (_array)
{
delete[]_array;
_array = NULL;
}
}
void PushBack(DataType data) 尾插
{
if (CheckCapacity()) //检查是否需要扩容
{
_array[_size++] = data;
}
}
void PopBack() 尾删
{
if (Empty()) //链表是否为空
{
return;
}
if (_size > 0)
{
_size--;
}
}
void Insert(size_t pos, DataType data) 在pos的位置插入data元素
{
size_t i;
i = _size;
if (CheckCapacity())
{
if (pos == _size )
{
PushBack(data);
return;
}
else
{
for (i; i >pos ; --i)
{
_array[i] = _array[i - 1];
}
_array[pos] = data;
_size++;
}
}
}
void Erase(size_t pos) 删除pos位置的元素
{
if (Empty())
{
return;
}
if (pos == _size -1)
{
PopBack();
return;
}
else
{
size_t i = pos+1;
for (i; i < _size; ++i)
{
_array[i - 1] = _array[i];
}
_size--;
}
}
int Size()const 计算顺序表的大小
{
return _size;
}
int Capacity()const 计算顺序表的容量
{
return _capacity;
}
bool Empty()const 顺序表的判空
{
return 0 == _size;
}
DataType& operator[](size_t index) []运算符的重载
{
assert(index >= 0 && index < _size);
return _array[index];
}
const DataType& operator[](size_t index)const
{
assert(index >= 0 && index < _size);
return _array[index];
}
private:
int CheckCapacity() 扩容操作
{
if (_size >= _capacity)
{
int newcapacity = 2 * _capacity;
DataType *tmp = new DataType[newcapacity];
memcpy(tmp, _array, _size * 4);
delete[]_array;
_array = tmp;
_capacity = newcapacity;
}
return 1;
}
DataType* _array;
size_t _size;
size_t _capacity;
};
{
SeqList s1(4);
s1.PushBack(1);
s1.PushBack(2);
s1.PushBack(3);
s1.PushBack(4);
s1.PushBack(5);
s1.PushBack(6);
s1.PopBack();
s1.PopBack();
s1.Insert(4, 7);
s1.Erase(4);
s1.Insert(2, 8);
s1.Erase(2);
s1.Size();
s1.Capacity();
SeqList s2(s1);
SeqList s3;
s3 = s1;
s1[0] = 9;
s1.PushBack(6);
return 0;
}
希望对大家有所帮助