顺序表-----C++实现
2017-03-03 17:46
204 查看
#include<assert.h>
#include<stdio.h> #include<stdlib.h> #include<iostream> using namespace std; #define DataType int class Vector { public: Vector() :_pData(new DataType[3]) ,_capacity(3) ,_size(0) {} Vector(const Vector& v) :_pData(new DataType[v._capacity]) ,_capacity(v._capacity) ,_size(v._size) { //memcpy(_pDate,v._pDate); for(size_t idx=0;idx<_size;idx++) { _pData[idx]=v._pData[idx]; } } Vector& operator=(const Vector& v) { DataType* pTemp=new DataType[v._capacity]; for(size_t idx=0;idx<v._capacity;idx++) { pTemp[idx]=v._pData[idx]; } delete[] _pData; _pData=pTemp; _capacity=v._capacity; _size=v._size; return *this; } void PushBack(const DataType& data) { _CheckCapacity(); _pData[_size++]=data; } void PopBack() { //assert(0 == _size); if(_size==0) { return; } --_size; } void Insert(size_t pos, const DataType& data) { if((_size-1)==pos) { PushBack(data); } else { _size+=1; _CheckCapacity(); for(size_t idx=_size-1;idx>pos;idx--) { _pData[++idx]=_pData[idx]; } _pData[pos+1]=data; } } void Erase(size_t pos) { size_t ret=_size; if((--ret)==pos) { PopBack(); }else if(0==pos) { DataType* pTemp=new int[_capacity]; for(size_t idx=1;idx<_size;idx++) { pTemp[idx-1]=_pData[idx]; } delete[] _pData; _pData =pTemp; --_size; } else { for(size_t idx=pos+1;idx<_size;idx++) { _pData[idx-1]=_pData[idx]; } --_size; } } void Assign(size_t n, const DataType& data) { _size=n; _CheckCapacity(); DataType* pTemp=new DataType[_capacity]; for(size_t idx=0;idx<n;idx++) { pTemp[idx]=data; } delete[] _pData; _pData = pTemp; } int Find(const DataType& data) { for(size_t idx=0;idx<_size;idx++) { if(_pData[idx]==data) { return idx; } } return -1; } ////////访问元素////////////////// DataType& Front() { assert(_pData); return _pData[0]; } const DataType& Front()const { assert(_pData); return _pData[0]; } DataType& Back() { assert(_pData); return _pData[_size-1]; } const DataType& Back()const { assert(_pData); return _pData[_size-1]; } DataType& operator[](size_t index) { assert(index<_size); return _pData[index]; } const DataType& operator[](size_t index)const { assert(index<_size); return _pData[index]; } DataType& At(size_t index) { assert(index<_size); return _pData[index]; } const DataType& At(size_t index)const { assert(index<_size); return _pData[index]; } //////////容量/////////////////// size_t Size()const { return _size; } size_t Capacity()const { return _capacity; } bool Empty()const { if(0==_size) { return true; } return false; } void ReSize(size_t n, const DataType& data = DataType()) { if(n<=_size) { _size = n; } else { size_t ret = _size; _size = n; _CheckCapacity(); for(size_t idx=ret;idx<n;idx++) { _pData[idx] = data; } } } void Clear() { _size=0; } ~Vector() { if(NULL != _pData) { delete[] _pData; _pData=NULL; _capacity=0; _size=0; } } private: void _CheckCapacity() { if(_size>=_capacity) { DataType* pTemp=new DataType[2*_capacity]; for(size_t idx=0;idx<_size;idx++) { pTemp[idx]=_pData[idx]; } delete[] _pData; _pData = pTemp; _capacity=2*_capacity; } } private: DataType* _pData; size_t _capacity; size_t _size; }; void funtest() { Vector v1; v1.PushBack(1); v1.PushBack(2); v1.PushBack(3); int a=3; int ret=v1.Find(a); /*v1.Erase(1);*/ //v1.Insert(2,7); //v1.PopBack(); /*v1.ReSize(5,10); int ret = v1.At(4);*/ } int main() { funtest(); return 0; }以上为动态顺序表C++实现,即在类中实现
相关文章推荐
- 线性表的顺序表示实现-C++版
- 链表的顺序表示和实现(C++模板类实现)
- [C/C++]函数参数的入栈顺序与可变参数的实现
- c++实现数据结构七 顺序循环队列
- c++实现数据结构五顺序栈
- 顺序栈的实现(SqStack, C++版)
- c++顺序容器内部实现
- C++实现顺序栈类
- 算式计算器C++实现代码(顺序栈结构 增加了一些功能 求指教)
- [C/C++]函数参数的入栈顺序与可变参数的实现
- 数据结构之顺序表C++实现
- 算式计算器C++实现代码(顺序栈结构 增加了一些功能 比如三角函数 求指教)
- 栈-顺序结构C++实现
- C++类模板 实现顺序表 从《数据结构》(C++版) 北京科海摘抄
- C++顺序表的实现(采用模板)
- 线性表的顺序表示实现-C++版
- 静态查找的方法:顺序查找、对半查找、分块查找,C++代码实现
- C++模板实现顺序表
- 判断出栈顺序是否正确,c++实现
- C++ 顺序栈的实现