顺序表
2015-08-26 15:26
218 查看
#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,删除所有X void 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; }
相关文章推荐
- 算法实现一行数据左边奇数右边偶数
- 虚函数的机制
- 从零开始学Java之单例模式:懒汉模式和饱汉模式
- iOS入门如何选择Swift和objective-c
- Java开发中Maven Jar包管理建议
- poj 3580 splay
- Active Directory Tools For SharePoint
- 【Git 】$ ./gradlew idea 构建一个idea的项目
- leetcode 220
- js根据类名获取元素——自定义getElementsByClass()
- Android下拉上滑显示与隐藏Toolbar另一种实现
- 理解Linux系统负荷
- pointPolygonTest函数
- R语言_方差分析
- Android下拉上滑显示与隐藏Toolbar另一种实现
- salt-API基本验证命令
- JS文档生成工具:JSDoc 介绍
- Hibernate延迟加载
- Ext 拆线图 LiveAnimated
- AndroidManifest.xml