顺序表

来源:互联网 发布:数控程序员考试 编辑:程序博客网 时间:2024/04/30 13:02
#include<iostream>using namespace std;typedef int DataType;class  SeqList{public:SeqList():_array(new DataType[3]), _size(0), _capicity(3){}SeqList(DataType *array, DataType size, DataType capicity){if (array == NULL){_array = new DataType[1];_array[0] = 1;_size = 0;_capicity = 0;}else{_array = new DataType[capicity];memcpy(_array, array, sizeof(DataType)*size);_size = size;_capicity = capicity;}}////拷贝构造函数//SeqList(const SeqList& sList)//{//_capicity = sList._capicity;//_array = new DataType[_capicity];//_size = sList._size;//memcpy(_array, sList._array, sizeof(DataType)*_size);//}////赋值运算符重载//SeqList& operator=(const SeqList& sList)//{//if (this != &sList)//{//delete[]_array;//_capicity = sList._capicity;//_array = new DataType[_capicity];//_size = sList._size;//memcpy(_array, sList._array, sizeof(DataType)*_size);//}//return *this;//}//优化写法void Swap(SeqList& sList){swap(_array, sList._array);swap(_size, sList._size);swap(_capicity, sList._capicity);}//拷贝构造函数SeqList(const SeqList& sList) :_array(NULL){SeqList tmp(sList._array, sList._size, sList._capicity);Swap(tmp);}//赋值运算符重载SeqList& operator=(const SeqList& sList){if (this != &sList){SeqList tmp(sList._array, sList._size, sList._capicity);Swap(tmp);}return *this;}~SeqList(){if (_array){delete[]_array;}_size = 0;_capicity = 0;}void Print(){int i = 0;for (; i<(int)_size; i++){cout<<_array[i]<<" ";}cout << endl;cout << "size=" << _size << " "<<"capicity="<<_capicity<<endl;}void ExpandSeqList(){DataType* tmp = NULL;if (_size ==_capicity){DataType* tmp = new DataType[2*_capicity];_capicity= _capicity * 2;memcpy(tmp, _array, sizeof(DataType)*_size);delete []_array;_array = tmp;}}void PushBack(const DataType& x){ExpandSeqList();_array[_size++] = x;}void PopBack(){if (_size == 0){return;}_size--;}void PushFront(const DataType& x){ExpandSeqList();for (int i =(int) _size-1; i >= 0; i--){_array[i + 1] = _array[i];}_array[0] = x;_size++;}void PopFront(){if (_size == 0){return;}for (int i = 1; i <(int)_size; i++){_array[i -1] = _array[i];}_size--;}//插入到index位置上void Insert( DataType index, DataType x){int i = 0;ExpandSeqList();for (i =_size - 1; i >= index; i--){_array[i + 1] = _array[i];}_array[index] = x;++_size;}//修改index位置上的void Modified(DataType index, DataType x){if (index > _size-1);{return;}_array[index] = x;}//删除index位置上的void Removed( DataType index){int i = 0;if (index >_size-1){return;}for (i = index + 1; i<_size; i++){_array[i - 1] =_array[i];}--_size;}//查找数据,DataType Find(DataType x,int index){for (int i = index; i < _size; i++){if (_array[i] == x){return  i;}}return -1;}//删除数据X,flag==1,删除所有Xvoid Erase(DataType x, int flag){int index = Find(x, 0);while (index != -1){Removed(index);if (flag == 1){index = Find(x, index);}else{return;}}}//冒泡排序void BubbleSort(){int i = 0;int j = 0;int exchange = 0;for (i =(int) _size-1; i >0; i--){for (j = 0; j <i; j++){if (_array[j] > _array[j + 1]){int tmp = _array[j];_array[j] = _array[j + 1];_array[j + 1] = tmp;exchange = 1;}}if (exchange == 0){break;}}}//选择排序void SelectSort(){int i = 0;int j = 0;int k = 0;for (i = 0; i<(int)_size - 1; i++){k = i;for (j = i + 1; j<(int)_size; j++){if (_array[k]<_array[j]){k = j;}}if (k != i){int tmp = _array[i];_array[i] = _array[k];_array[k] = tmp;}}}//二分搜索int BinarySearch(DataType x){int left = 0;int right = _size - 1;while (left <= right){int mid = (right - left) / 2 + left;if (_array[mid] == x){return mid;}if (_array[mid] > x){left = mid + 1;}if (_array[mid] < x){right = mid - 1;}}return -1;}private:DataType *_array;size_t _size;size_t _capicity;};int main(){SeqList op1;op1.PushBack(1);op1.PushBack(2);op1.PushBack(3);op1.PushBack(4);op1.PushBack(5);op1.Print();op1.SelectSort();op1.Print();int ret=op1.BinarySearch(8);cout << "ret="<<ret << endl;/*op1.PushBack(5);op1.PushBack(6);op1.PushBack(3);op1.PushBack(8);op1.Print();op1.Erase(3, 1);op1.Print();*//*op1.Insert(5, 100);*///op1.Modified(5, 100);/*op1.removed(3);*//*int i=op1.find(6);cout << i << endl;*///op1.Print();/*op1.PopBack();op1.PopBack();op1.Print();*//*op1.PushFront(100);op1.Print();*//*op1.PopFront();op1.Print();*//*SeqList op2 = op1;;op2.Print();SeqList op3;op3 = op1;op3.Print();*/system("pause");return 0;}

0 0
原创粉丝点击