C++实现顺序表
来源:互联网 发布:乔致庸 知乎 编辑:程序博客网 时间:2024/05/21 22:36
#pragma once#include<assert.h>typedef int DataType;class SeqList{public: //传统写法调用的构造函数 SeqList() :_array( NULL) ,_size(0) ,_capacity(0) {} //现代写法调用的构造函数 SeqList( DataType* array ,size_t size) :_array( new DataType [size]) , _size( size) , _capacity( size) { memcpy(_array, array, sizeof (DataType)* size); } ~SeqList() { if (_array) { delete[] _array; } } //深拷贝传统写法 /*SeqList(const SeqList& s) :_array(new DataType[s._size]) , _capacity(s._size) , _size(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)*s._size); } return *this; }*/ //现代写法 //按size拷贝构造 SeqList( const SeqList & s) :_array( NULL) { SeqList tmp(s ._array, s._size); swap(_array, tmp._array); _size = s._size; //s._size赋值给_size _capacity = s._size;//所以把s._size赋值给新的_capacity } //赋值运算符的重载 SeqList& operator=(SeqList s) //无const 无引用 { swap( s._array,_array); _size = s._size; _capacity = s._capacity; return *this ; }public: void PushBack(DataType x) { CheckCapacity(); _array[_size++] = x; } void PopBack() { if (--_capacity ) { _array[_size--]; } if (_size == 0) cout << "NULL"; } void PushFront(DataType x) { CheckCapacity(); _size++; for (int i =_size-1; i >=0; i--) //_size-1 i>=0 { _array[i + 1] = _array[i]; } _array[0] = x; } void PopFront() { if (_size <= 0) { cout << "NULL"; return; } else { for (int i = 0; i <_size; i++ ) { _array[i] = _array[i + 1]; } _size--; } } void Insert(size_t pos, DataType x ) { if (pos == 0) { PushFront( x); } else { _size++; for (int i = _size - 1; i >= pos; i--) { _array[i] = _array[i - 1]; } _array[ pos] = x ; } } //attention void Erase(size_t x) { int count = 0; for (int i = 0; i <= _size; ++i) { if (_array[i] == x ) { count++; } else { _array[i - count] = _array[i]; } } //放在循环外面 _size -= count; } int Find(DataType x) { for (int i = 0; i < _size; i++) { if (x == _array[i]) { return i; } } } void PrintList() { for (int i = 0; i < _size; ++i) { //if (_array[i]) cout << _array[i] << "->"; } cout << "NULL"<<endl; }private: void CheckCapacity() { if (_size >= _capacity) { _capacity = 2 * _capacity + 3; _array =( DataType*) realloc(_array, (sizeof(DataType ))*_capacity); //realloc后将指针赋给新的空间 //sizeof(DataType)*_capacity } }private: DataType* _array; size_t _size; size_t _capacity;}; void Test1(){ SeqList s1; //先定义一各变量 s1.PushBack(1); s1.PushBack(2); s1.PushBack(3); s1.PushBack(4); s1.PushBack(5); s1.PrintList(); /* SeqList s2(s1); s2.PrintList();*/ s1.PopBack(); s1.PopBack(); s1.PopBack(); s1.PopBack(); s1.PrintList(); } //PushFront() void Test2() { SeqList s1; s1.PushFront(1); s1.PushFront(2); s1.PushFront(3); s1.PushFront(4); s1.PushFront(5); s1.PrintList(); s1.PopFront(); s1.PopFront(); s1.PopFront(); s1.PrintList(); } //pushback Insert void Test3() { SeqList s1; //先定义一各变量 s1.PushBack(1); s1.PushBack(2); s1.PushBack(3); s1.PushBack(4); s1.PushBack(5); s1.PrintList(); s1.Insert(0, 0); s1.Insert(1, 6); s1.Insert(7, 5); s1.PrintList(); } void Test4() { SeqList s1; s1.PushBack(1); s1.PushBack(2); s1.PushBack(3); s1.PushBack(4); s1.PushBack(5); s1.PushBack(5); s1.PushBack(5); s1.PrintList(); s1.Erase(5); s1.PrintList(); } void Test5() { SeqList s1; s1.PushBack(1); s1.PushBack(2); s1.PushBack(3); s1.PushBack(4); s1.PushBack(5); s1.PrintList(); //s1.Erase(5); int ret5 = s1.Find(5); int ret4 = s1.Find(4); int ret3 = s1.Find(3); int ret2 = s1.Find(2); int ret1 = s1.Find(1); cout << ret5 << ret4 << ret3 << ret2 << ret1 << endl; } void TestSeqList6() { SeqList s1; s1.PushBack(2); s1.PushBack(2); s1.PushBack(3); s1.PushBack(2); s1.PushBack(4); s1.PushBack(2); s1.PushBack(5); s1.PushBack(2); s1.Erase(2); s1.PrintList(); }
0 0
- 【C++】实现顺序表
- 【c++】实现顺序表
- C语言实现顺序表
- 数据结构---顺序表c实现
- 顺序表c语言实现
- 顺序表的C实现
- c语言实现顺序表
- 顺序表实现-c
- 【C++】顺序表的实现
- 顺序表(C实现)
- C语言实现顺序表
- C语言实现顺序表
- C语言实现顺序表
- C语言实现顺序表
- 【C++】顺序表的实现
- C语言实现顺序表
- C语言实现顺序表
- C语言实现顺序表
- sqlmap用户手册
- 薛开宇caffe学习笔记的补充笔记1
- SQL Server 2008重装系统后还原原来的数据库
- Http协议
- PAT甲级.1077. Kuchiguse (20)
- C++实现顺序表
- 六、线性表(3)
- python OrderedDefaultDict 的实现
- Mac 下为将ffmepg +x264移植到android中(2)
- SQL Server 2008 中,将int数据类型如何转换为string输出?
- 薛开宇caffe学习笔记的补充笔记2
- SpringMVC的四个基本注解
- AngularJS
- 注释转换