顺序表 C++模板实现

来源:互联网 发布:成都理工大学网络教育 编辑:程序博客网 时间:2024/06/05 00:28
#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);        //在最后一个元素后增加一个元素xvoid insert(int i , T x);   //在下标为i的元素处增加一个元素xvoid 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); //增加一个元素,元素值为1a.add(2); //增加一个元素,元素值为2a.add(3); //增加一个元素,元素值为3a.add(4); //增加一个元素,元素值为4a.add(5); //增加一个元素,元素值为5a.insert(4,0); //在下表为4的元素,插入一个值为0的元素a.dele(4);  //删除上次插入的元素a.set(0,9); //设置下标为0的元素的值为9a.printAll(); //打印所有元素的值}
0 0
原创粉丝点击