1.顺序表的初始化:
template<class T> //构造函数初始化
SqeList<T>::SqeList(int size)
{
MaxSize=size;
length=0;
element=new T[MaxSize];
} //算法时间复杂度O(1);
2.创建表操作
template<class T> //深度复制构造函数
SqeList<T>::SqeList(const SqeList<T> &list)
{
MaxSize=list.MaxSize;
length=list.length;
element=new T[MaxSize];
for(int i=0;i<length;i++)
element[i]=list.element[i];
} //时间复杂度为O(n)
3.查找指定元素
template<class T>
int SqeList<T>::LoacElem(int value)const
{
int i=0;
while(i<length) //查找范围
{
if(element[i]==value) //找到value
return i+1;
i++;
}
return 0; //查找失败
} //时间复杂度O(n)
4.取元素操作
template<class T>
bool SqeList<T>::GetElem(int k,T &val)const
{
if(k>=1&&k<=length)
{
val=element[k-1];
return true;
}
return false;
} //时间复杂度为O(1)
5.插入元素
template<class T>
bool SqeList<T>::InsertList(int k,T val)
{
if(k<0&&k>length+1)
std::cout<<"要插入位置不在范围内."<<std::endl;
if(length==MaxSize)
std::cout<<"当前表已满."<<std::endl;
for(int i=length-1,i>k-1;i--)
{
element[i+1]=element[i]; //插入位置后面的元素往后移动
}
element[k-1]=val; //val插入表中
length++; //表的长度+1
return true;
} //时间复杂度为O(n)
6.删除元素
template<class T>
bool SqeList<T>::DeteleList(int k,T &val)
{
if(k<0&&k>length)
std::cout<<"要删除的元素不在范围内."<<std::endl;
if(isEmpty())
std::cout<<"当前表为空,没有元素可以操作."<<std::endl;
val=element[k-1] //删除元素
for(int i=0;i<length;i++)
element[i-1]=element[i]; //将后面元素往前移动
length--; //表长度-1
return true;
}//时间复杂度为O(n)s
7.判断是否为空表
template<class T>
bool SqeList<T>::isEmpty()
{
if(length==0)
return true;
else
return false;
}
8.输入操作
template<class T>
istream& operator>>(istream &in,const SqeList<T> &List)
{
int spaceMax,listNum;
cout<<"输入顺序表的最大空间数"<<endl;
in>>spaceMax;
cout<<"输入顺序表的元素个数"<<endl;
in>>listNum;
cout<<"请依次输入"<<listNum<<"个元素"<<endl;
List.MaxSize=spaceMax;
List.length=listNum;
List.element=new T[List.MaxSize];
for(int i=0;i<List.length;i++)
{
in>>element[i];
}
return in;
} //时间复杂度为O(n)
9.输出操作
template<class T>
ostream& operator<<(ostream &os,const SqeList<T> &List)
{
out<<"输出顺序表中的元素."<<endl;
for(int i=0;i<List.length;i++)
out<<List.element[i]<<" ";
return out;
} //时间复杂度为O(n)