顺序表 C++模板实现
#include <iostream> using namespace std; template <typename T> class list{ private: int maxLen; //顺序表能允许的最大长度 int num; //当前表中的元素个数 T *data; //保存T类型数组首地址 public: list(int max); //构造函数 ~list(); //析构函数 void add(const T x); //在最后一个元素后增加一个元素x void insert(int i , T x); //在下标为i的元素处增加一个元素x void dele(int i); //删除下标为i的元素 void set(int i, T x); //设置下标为i的元素的值 int locate(T x); //查找第一个与x相同元素的下标 T get(int i); //返回下标为i的元素 void printAll(); //打印整个顺序表 }; //构造函数实现 template <typename T> list<T>::list(int max){ maxLen = max; //顺序表最大长度 data = new T[maxLen]; //动态数组 num=0; } //析构函数实现 template <typename T> list<T>::~list(){ delete [] data; //释放动态数组 } //在最后一个元素后增加一个元素x,实现部分 template <typename T> void list<T>::add(T x){ data[num]= x; num++; } //在下标为i的元素处增加一个元素x,实现部分 template <typename T> void list<T>::insert(int i ,T x){ if(i<0 && i>num-1){ //判断插入位置是否介于下标0与num-1之间 cerr<<"插入位置有误"<<endl; exit(1); } else if(num == maxLen){ //判断表是否满了 cerr<<"顺序表已满,无法插入" <<endl; exit(1); } int j = num; while(j>i){ data[j] = data[j-1]; j--; } data[i] = x; num++; } //删除下标为i的元素,实现部分 template <typename T> void list<T>::dele(int i){ if(i<0 && i>num-1){ //判断删除位置是否介于下标0与num-1之间 cerr<<"删除位置有误"<<endl; exit(1); } int j = i+1; while(j<num){ data[j-1] = data[j]; j++; } num--; } //设置下标为i的元素的值,实现部分 template <typename T> void list<T>::set(int i , T x){ data[i] = x; } //查找第一个与x相同元素的下标,实现部分 template <typename T> int list<T>::locate(T x) { for(int i = 0 ; i < num ; i++){ if(data[i] == x) return i; } return -1; } //返回下标为i的元素,实现部分 template <typename T> T list<T>::get(int i){ return data[i]; } //打印整个顺序表,实现部分 template <typename T> void list<T>::printAll(){ for(int i = 0 ; i <num ; i++){ cout<<data[i]<<endl; } } void main(){ list<int> a(10); //创建元素类型为int,最大长度为10的顺序表 a.add(1); //增加一个元素,元素值为1 a.add(2); //增加一个元素,元素值为2 a.add(3); //增加一个元素,元素值为3 a.add(4); //增加一个元素,元素值为4 a.add(5); //增加一个元素,元素值为5 a.insert(4,0); //在下表为4的元素,插入一个值为0的元素 a.dele(4); //删除上次插入的元素 a.set(0,9); //设置下标为0的元素的值为9 a.printAll(); //打印所有元素的值 }
posted on 2014-04-08 21:05 xiaogua918 阅读(264) 评论(0) 编辑 收藏 举报