C++ 类模版实现顺序表增删改查

#include 
#include 
#include 
#include 
#include //算法头文件
#include 
#include 
#include 
#include 
using namespace std;
#define MAX 50
template<typename T> class Sqlist{
	public:
		int len;
		T arrs[MAX];
		
		Sqlist(){}
		Sqlist(int len, T arrs[]){
			this->len = len;
			for(int i=0; i<len; i++){
				this->arrs[i] = arrs[i];
			}
		}
		//遍历
		void print();
		//添加元素  下标
		int insertByIndex(int index, T ele);
		//添加元素  位置
		int insertByPosition(int pos, T ele);
		//查找,返回下标 如果元素重复,返回第一个元素出现的位置 
		int findByele(T ele);
		//删除  位置
		int deleteByPosition(int pos);
		//删除  下标
		int deleteByIndex(int index);
		//删除元素 
		void deleteElement(T ele);
};
	//遍历
	template<typename T> void Sqlist<T>::print(){
		for(int i=0; i<this->len; i++){
			cout<<this->arrs[i]<<"  ";
		}
		cout<<endl;
	}
	//添加元素  下标
	template<typename T> int Sqlist<T>::insertByIndex(int index, T ele){
		if(index<0 || index>=this->len || this->len>=MAX){	//下标不合法 线性表已满 
			return -1;
		}
		for(int i=this->len-1; i>=index; i--){
			this->arrs[i+1] = this->arrs[i];
		}
		this->arrs[index] = ele;
		this->len++;
		return 1;
	}
	//添加元素  位置
	template<typename T> int Sqlist<T>::insertByPosition(int pos, T ele){
		if(pos<1 || pos>this->len+1 || this->len>=MAX){//位置不合法 线性表已满 
			return -1;
		}
		for(int i=this->len-1; i>=pos-1; i--){
			this->arrs[i+1] = this->arrs[i];
		}
		this->arrs[pos-1] = ele;
		this->len++;
	}
	//查找,返回下标
	template<typename T> int Sqlist<T>::findByele(T ele){
		for(int i=0; i<this->len; i++){
			if(this->arrs[i] == ele){
				return i;
			}
		}
		return -1;
	}
	//删除  位置
	template<typename T> int Sqlist<T>::deleteByPosition(int pos){
		if(pos<1 || pos>this->len || this->len==0){	//位置不合法或者表空 
			return -1;
		}
		for(int i=pos-1; i<this->len; i++){
			this->arrs[i] = this->arrs[i+1];
		}
		this->len--;
		return 1;
	}
	//删除  下标
	template<typename T> int Sqlist<T>::deleteByIndex(int index){
		if(this->len==0 || index<0 || index>this->len-1){
			return -1;
		}
		for(int i=index; i<this->len; i++){
			this->arrs[i] = this->arrs[i+1];
		}
		this->len--;
		return 1;
	}
	//删除元素 
	template<typename T> void Sqlist<T>::deleteElement(T ele){
		for(int i=0; i<this->len; i++){
			int temp = findByele(ele);
			if(temp != -1){	//如果不等于-1说明存在这个元素,删除下标 
				deleteByIndex(temp);
			}
		}
	}
	
int main(){

	int arrs[] = {1,2,3,3,5,6};
	
	Sqlist<int> sqlist(6,arrs);
	
	cout<<"---------print-----------\n";
	sqlist.print();
	
	cout<<"------在下标为0处插入元素----insertByIndex---------\n";
	sqlist.insertByIndex(0,6);
	
	sqlist.print();
	
	cout<<"-----在第一个位置插入元素----insertByPosition-----------\n";
	sqlist.insertByPosition(1,10);
	
	sqlist.print();
	
	cout<<"----查找3的位置-----findByele-----------\n";
	int t = sqlist.findByele(3);
	cout<<"下标为:"<<t<<endl;
	
	cout<<"----删除第一个位置-----deleteByPosition-----------\n";
	sqlist.deleteByPosition(1);
	sqlist.print();
	
	cout<<"----删除下标为0的元素-----deleteByIndex-----------\n";
	sqlist.deleteByIndex(0);
	sqlist.print();
	
	cout<<"----删除3-----deleteElement-----------\n";
	sqlist.deleteElement(3);
	sqlist.print();
	
	return 0;
}

C++ 类模版实现顺序表增删改查_第1张图片

你可能感兴趣的:(C++与数据结构)