顺序表 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(); //打印所有元素的值
}
使用c++实现顺序表:多文件编程,层次清晰,函数有注释 SeqList();//构造函数,存储的元素个数设为0 bool setLength(size_t length);//设置已经存储的元素个数 bool addElement(ElemType element);//把某个元素添加到顺序表末尾 bool addElement(ElemType element , size_t n);//插入一个元素,使其成为第n个元素,其余元素后移 bool delElement();//删除所有的元素 bool delElement(size_t n);//删除第n个元素 bool delElement(string elementDetailType,string elementDetail);//通过某个元素细节找到元素,把这个元素删除 bool replaceElement(ElemType element , size_t n);//使用一个元素,替换掉第n个元素 bool swapElement(size_t n1 , size_t n2);//把第n1个元素和第n2个元素交换 ElemType* getElement();//得到数组头的指针 ElemType* getElement(size_t n);//得到第n个元素的指针 size_t getLength();//得到存储的元素个数 size_t getMaxSize();//得到顺序表容量 bool showElementDetail();//输出所有的元素细节 bool showElementDetail(size_t n);//输出第n个元素的细节 bool showElementDetail(string elementDetailType,string elementDetail);//通过某个元素细节找到元素,输出元素所有细节 size_t findElement(string elementDetailType,string elementDetail);//通过某个元素细节找到元素位置 static int inputAInt(int min = 0,int max = 9,int defaultValue = -1);//从键盘读取,限制为一个min到max间的整数,非法情况返回defaultValue void startControlLoop();//打开控制界面 ~SeqList();//析构函数
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值