顺序表C++模板实现
2017-12-06 16:57
483 查看
#include<iostream> using namespace std; const int MAXSIZE = 20; template <class T> class SqList{ private: T *data; int length; public: SqList(); //构造函数 ~SqList(); // 析构函数 void CreatList(T a[], int n); //创建顺序表 void Display(); //输出顺序表中所有元素 int GetLength(); //获取顺序表的长度 bool GetElem(int, T &elem); // 获取顺序表中的某个元素 bool ListInsert(int i, T elem); // 插入元素 bool ListDelete(int i, T &elem); //删除元素 }; template<class T> SqList<T>::SqList(){ cout<<"constract ok"<<endl; data = new T[MAXSIZE]; length = 0; } template<class T> SqList<T>::~SqList(){ cout<<"No"<<endl; delete [] data; } template<class T> void SqList<T>::CreatList(T a[], int n){ for(int i = 0; i < n; i++){ data[i] = a[i]; } length = n; cout<<"create SqList success!"<<endl; } //获取顺序表的长度 template<class T> int SqList<T>::GetLength(){ return length; } //获取指定元素 template<class T> bool SqList<T>::GetElem(int i, T &e){ if(length == 0 || i < 1 || i > length){ return false; } e = data[i-1]; return true; } //插入元素 template<class T> bool SqList<T>::ListInsert(int i, T e){ if(length == MAXSIZE) //保证插入位置正确 return false; if(i < 1 || i > length+1) return false; if(i < length){ for(int k = length-1; k >= i-1; k--) //将插入位置之后的元素都向后移动一个位置 data[k+1] = data[k]; } data[i-1] = e; //将待插入的元素赋值给插入位置 length++; //将顺序表的长度增加一个 return true; } //删除元素 template<class T> bool SqList<T>::ListDelete(int i, T &e){ if(length == 0) //保证删除位置正确 return false; if(i < 1 || i > length) return false; e = data[i-1]; //将要删除的元素保存给 e if(i < length){ for(int k = i; k < length; k++){ //将删除位置后面的元素都向前移动一个位置 data[k-1] = data[k]; } } length--; //将顺序表的长度删除一个 return true; } template<class T> void SqList<T>::Display(){ cout<<"display SqList:"; for(int i = 0; i < length; i++){ cout<<data[i]<<"\t"; } cout<<endl; } //堆中创建对象 int main(){ SqList<int> *sqlist = new SqList<int>(); int arr[5] = {3, 4, 5, 6, 7}; sqlist->CreatList(arr, 5); sqlist->Display(); cout<<"get element length is :"<<sqlist->GetLength()<<endl; int a; sqlist->GetElem(2, a); cout<<"get element is : "<<a<<endl; sqlist->ListInsert(2, 100); sqlist->Display(); int b; sqlist->ListDelete(2, b); cout<<"delete element is : "<<b<<endl; sqlist->Display(); delete sqlist; return 0; } //栈中创建对象 int main01(){ SqList<int>sqlist; int arr[5] = {3, 4, 5, 6, 7}; sqlist.CreatList(arr, 5); sqlist.Display(); cout<<"get element length is :"<<sqlist.GetLength()<<endl; int a; sqlist.GetElem(2, a); cout<<"get element is : "<<a<<endl; sqlist.ListInsert(2, 100); sqlist.Display(); int b; sqlist.ListDelete(2, b); cout<<"delete element is : "<<b<<endl; sqlist.Display(); // delete sqlist; return 0; }
ps: 顺序表的三种代码实现过程都写完了,其中有学习到了一点新的知识!不错!有问题欢迎指正哦 ^_^
相关文章推荐
- C++使用模板实现顺序表
- 数据结构(1)顺序表 c++ 模板实现
- C++用模板实现顺序表和栈
- C++模板及用模板实现双向循环链表,顺序表
- C++实现模板顺序表和三种排序方法
- C++用模板实现顺序表和栈
- 【C++】用模板实现顺序表Vector
- C++模板实现链表,顺序表
- 顺序表 C++模板实现
- C++模板实现简单的链表和顺序表
- 编译器对C++ 11变参模板(Variadic Template)的函数包扩展实现的差异
- 单例模式的 模板方式实现 c++
- C++模板实现归并排序
- 栈的简介及C++模板实现
- 数据结构学习第一篇--C++实现单链表模板
- 大话设计模式--模板方法模式 TemplateMethod -- C++ 实现
- 数据结构图文解析之:数组、单链表、双链表介绍及C++模板实现
- C++模板实现二叉树(六 AVL树基础与旋转)
- c++模板实现shell排序
- 用C++模板实现线性表的链式存储的基本算法(数据结构C++版 北京科海)