类模版实现动态顺序表
来源:互联网 发布:迅雷 mac safari提示 编辑:程序博客网 时间:2024/06/08 14:12
#include<iostream>#include<assert.h>using namespace std;#pragma warning(disable:4996)template<class T, int DefaultCapacity = 10>class SeqList{public: SeqList(T* data = NULL, size_t size = 0); SeqList(const SeqList& s); ~SeqList();public: void CheckCapacity(); void PushBack(const T& x); void PopBack(); void PushFront(const T& x); void PopFront(); void Print(); void Insert(size_t index, const T& x); void Modified(size_t index, const T& x); int Find(const T& x); void Remove(size_t index);private: T* _data; size_t _size; size_t _capacity;};template<class T, int DefaultCapacity = 10>SeqList<T, DefaultCapacity>::SeqList(T* data = NULL, size_t size = 0):_data(new T[DefaultCapacity]) , _size(size) , _capacity(DefaultCapacity){}template<class T, int DefaultCapacity = 10>SeqList<T, DefaultCapacity>::SeqList(const SeqList& s):_data(new T[DefaultCapacity]), _size(s._size), _capacity(s._capacity){ memcpy(_data, s._data, sizeof(T*)* _size);}template<class T, int DefaultCapacity = 10>SeqList<T, DefaultCapacity>::~SeqList(){ if (_data) { delete[] _data; }}template<class T, int DefaultCapacity = 10>void SeqList<T, DefaultCapacity>::CheckCapacity(){ if (_size >= _capacity) { _capacity *= 2; T* tmp = new T[_capacity]; memcpy(tmp, _data, sizeof(T*)* _size); delete _data; _data = tmp; }}template<class T, int DefaultCapacity = 10>void SeqList<T, DefaultCapacity>::PushBack(const T& x){ CheckCapacity(); _data[_size] = x; _size++;}template<class T, int DefaultCapacity = 10>void SeqList<T, DefaultCapacity>::Print(){ for (int i = 0; i < _size; i++) { cout << _data[i] << "-"; } cout << endl;}template<class T, int DefaultCapacity = 10>void SeqList<T, DefaultCapacity>::PopBack(){ if (_size) { _size--; } else { cout << "seqlist is empty" << endl; }}template<class T, int DefaultCapacity = 10>void SeqList<T, DefaultCapacity>::PushFront(const T& x){ CheckCapacity(); if (_size == 0) { _data[_size] = x; } else { for (int i = _size; i > 0; i--) { _data[i] = _data[i - 1]; } _data[0] = x; } _size++;}template<class T, int DefaultCapacity = 10>void SeqList<T, DefaultCapacity>::PopFront(){ if (_size) { for (int i = 0; i < _size - 1; i++) { _data[i] = _data[i + 1]; } _size--; } else { cout << "Seqlist is empty" << endl; }}template<class T, int DefaultCapacity = 10>void SeqList<T, DefaultCapacity>::Insert(size_t index, const T& x){ assert(this); CheckCapacity(); if (_size == 0) { cout << "Seqlist is empty" << endl; } else { if (index <= _size) { for (int i = _size; i > index; i--) { _data[i] = _data[i - 1]; } _data[index] = x; _size++; } else { cout << "Index is wrong" << endl; } }}template<class T, int DefaultCapacity = 10>void SeqList<T, DefaultCapacity>::Modified(size_t index, const T& x){ assert(this); if (index < _size) { _data[index] = x; } else { cout << "Index is wrong" << endl; }}template<class T, int DefaultCapacity = 10>int SeqList<T, DefaultCapacity>::Find(const T& x){ assert(this); if (_size) { for (int i = 0; i < _size; i++) { if (_data[i] == x) { cout << "Find " << x << endl; return i; } } cout << "not find" << endl; } else { cout << "Seqlist is empty" << endl; } return 0;}template<class T, int DefaultCapacity = 10>void SeqList<T, DefaultCapacity>::Remove(size_t index){ assert(this); if (index < _size) { for (int i = index; i < _size - 1; i++) { _data[i] = _data[i + 1]; } _size--; } else { cout << "Index is wrong or seqlist is empty" << endl; }}void Test1(){ SeqList<char> s1; s1.PushBack('1'); s1.PushBack('2'); s1.PushBack('3'); s1.Print(); s1.PopBack(); /*s1.PopBack(); s1.PopBack(); s1.PopBack();*/ s1.Print();}void Test2(){ SeqList<double> s1; s1.PushFront(1.1); s1.PushFront(2.2); s1.PushFront(3.3); s1.Print(); /*s1.PopFront(); s1.PopFront(); s1.PopFront(); s1.PopFront();*/ /*s1.Insert(3, 5);*/ /*s1.Modified(2, 9);*/ s1.Find(3.3); s1.Remove(3); s1.Print();}int main(){ Test1(); //Test2(); getchar(); return 0;}
0 0
- 类模版实现动态顺序表
- 模版实现顺序表
- 【C++】模版类实现普通类静态顺序表
- 【C++数据结构】顺序表的模版类实现
- 动态实现顺序表
- 实现动态顺序表
- 顺序二叉树链表实现<模版>
- 顺序表结构的模版类
- 顺序表的动态实现
- C++实现动态顺序表
- 模板实现动态顺序表
- 动态顺序表的实现
- 动态顺序表的实现
- C++实现动态顺序表
- 动态顺序表的实现
- 简单实现动态顺序表
- 动态顺序表的实现
- C++实现动态顺序表
- 利用C的BMP图像的读取、保存及旋转的实现
- private 和final区别 代码实现
- Ubuntu-14.04 脚本双击不执行解决方法
- 移除节点
- php设置时区和获取当前时间
- 类模版实现动态顺序表
- 十道海量数据处理面试题
- Interleaving String
- Correlation Filter in Visual Tracking系列二:Fast Visual Tracking via Dense Spatio-Temporal Context Lear
- [Java]如何打印一个方法的调用栈?
- CONTEST221 洛谷9月月赛Div.2 -P2420 让我们异或吧
- iOS9中Bitcode的介绍及配置
- 希尔伯特空间
- 及时刷新子窗体