C++ 类模版实现顺序表增删改查
程序员文章站
2022-05-08 08:44:50
...
#include <iostream>
#include <iomanip>
#include <string.h>
#include <cmath>
#include <algorithm>//算法头文件
#include <fstream>
#include <cstdlib>
#include <vector>
#include <sstream>
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;
}
上一篇: JavaScript的DOM和BOM编程
下一篇: Python 面向对象编程(上篇)