C++实现动态顺序表
2017-08-03 11:51
204 查看
#include<iostream> #include<assert.h> using namespace std; typedef int DataType; class Seqlist { friend ostream& operator<<(ostream&_cout, const Seqlist&s); public: Seqlist() :_size(0) , _capacity(3) , _pdata(new DataType[_capacity]) {} Seqlist(DataType arr[], size_t size) //数组版构造函数 :_size(size) , _capacity(size) , _pdata(new DataType[size]) { //方法一: size_t i = 0; for (; i < size; i++) { _pdata[i] = arr[i]; } //方法二: memcpy(_pdata, arr, size*sizeof(DataType)); } Seqlist(const Seqlist& s) :_size(s._size) , _capacity(s._capacity) , _pdata(new DataType(s._capacity)) { size_t i = 0; for (; i < s._size; i++) { _pdata[i] = s._pdata[i]; } } Seqlist& operator =(const Seqlist& s) { if (this != &s) { DataType* tmp = _pdata; _pdata = new DataType[s._capacity]; _size = s._size; _capacity = s._capacity; delete[] tmp; size_t i = 0; for (i = 0; i < s._size; i++) { _pdata[i] = s._pdata[i]; } } return *this; } ~Seqlist() { if (_pdata != NULL) { delete[] _pdata; _pdata = NULL; _size = 0; _capacity = 0; } } void PushBack(const DataType& x) { assert(_pdata); CheckCapacity(); _pdata[_size] = x; _size++; } void PopBack() { assert(_pdata); _size--; } void Insert(size_t pos, const DataType &x) { assert(pos >= 0 && pos < _size); CheckCapacity(); size_t i = 0; for (i = _size; i>pos; i--) { _pdata[i] = _pdata[i - 1]; } _pdata[pos] = x; _size++; } void Erase(size_t pos) { assert(pos >= 0 && pos < _size); if (_size == 0) { return ; } else { size_t i = 0; for(i = pos; i < _size - 1;i++) { _pdata[i] = _pdata[i + 1]; } _size--; } } size_t Find(const DataType x)const { size_t i = 0; for (i = 0; i < _size; i++) { if (_pdata[i] == x) { return i; } } return -1; } bool Empty() { return (_size == 0); } void Clear() { if (_pdata != NULL) { delete[] _pdata; _pdata = NULL; _size = 0; _capacity = 0; } } void Resize(size_t size, const DataType &x) { if (size > _size) { size_t temp = _size; _size = size; CheckCapacity(); size_t i = 0; for (i = temp; i < size; i++) { _pdata[i] = x; } } else { _size = size; } } private: void CheckCapacity() { if (_size >= _capacity) { DataType* newspace = new DataType[2 * _capacity]; size_t i = 0; for (; i < _size; i++) { newspace[i] = _pdata[i]; } delete[] _pdata; _pdata = NULL; _pdata = newspace; _capacity *= 2; } } private: size_t _size; size_t _capacity; DataType* _pdata; }; ostream& operator<<(ostream&_cout, const Seqlist&s) { size_t i = 0; for (i = 0; i < s._size; i++) { _cout << s._pdata[i] << "->"; } return _cout; } void test() { int arr[5] = { 0 }; Seqlist s1; Seqlist s2(arr, 5); cout << s2 << endl; s1.PushBack(1); s1.PushBack(2); s1.PushBack(3); s1.PushBack(4); s1.PushBack(5); cout << s1 << endl; s1.PopBack(); cout << s1 << endl; s1.Insert(2, 5); cout << s1 << endl; s1.Erase(3); cout << s1 << endl; s1.Resize(7, 6); cout << s1 << endl; s1.Resize(3, 0); cout << s1 << endl; } int main() { test(); system("pause"); return 0; }
相关文章推荐
- C++实现动态顺序表
- C++实现动态顺序表
- C++实现动态顺序表
- c++实现动态顺序表
- 动态顺序表C++实现
- C++实现动态顺序表
- C++实现动态顺序表
- c++ 实现动态顺序表(拷贝构造 赋值运算符重载等操作)
- c++(模板类)实现顺序表
- C++动态数组的实现
- 算法导论第十五章动态规划--工厂装配线c++代码实现
- 在C++中实现库动态初始化的一种方法
- 流水线调度最优问题(装配线调度问题)动态规划 O(n)时间(线性时间)C++实现
- 矩阵链乘法问题(给A1A2A3...An加括号,使之乘法次数最小)动态规划问题C++实现
- [UE4]C++实现动态加载的问题:LoadClass<T>()和LoadObject<T>()
- 实现 动态顺序表
- C语言实现动态顺序表
- C++动态数组的实现
- 动态聚类中 C-均值算法 (K-均值算法)的C++实现
- C++实现的动态数组