//构造函数,分配m个存储单元的顺序空间
templete<class ElemType>
SqList<ElemType>::SqList(int m)
{
len =0 ;
if (m==0)
elem=NULL;
else
elem = new ElemType [m];
size=m;
}
//顺序表复制
templete <class ElemType>
SqList<ElemType>::SqList(const SqList<ElemType >&r)
{
len =0;
size=0;
elem=NULL;
CopyFrom(r);
}
//顺序表结构销毁
templete <class ElemType>
SqList<ElemType>::~SqList()
{
delete[ ] elem;
}
//取顺序表中序号第i个的数据元素值
templete <class ElemType>
bool SqList<ElemType>::GetElem(ElemType & e , int i ) const
{
if (i<1 || i>len)
return false;
e= elem[i-1]; //给变量e
return true;
}
//在顺序表中第i处存入数据元素e
templete <class ElemType>
SqList<ElemType>::~SqList()
{
if(i<1 || i>len) return false;
elem[i-1]=e;
return true;
}
//在顺序表中查找符合条件的数据元素
templete <class ElemType>
int SqList<ElemType>::LocateElem(const ElemType &e) const
{
ElemType *p=elem;
int i=1;
while (i<=len && *p=e){
p++;
i++;
}
if (i<=len)
return i;
return 0;
}
//在顺序表中第i个位置插入新的数据元素
templete <class ElemType>
bool SqList<ElemType>::Insert(const ElemType &e , int i)
{
if (i<1 || i>len+1)
return false; //插入位置合法性判断
if (len >=siaze){ //表满则扩展空间
ElemType * newbase;
newbase = new ElemType [size+10]; // 指针指向新的表首地址
if (! newbase) return false; //判断是否new成功了
for (int j=0;j<len;j++)
newbase [j]=elem[j]; //原表的元素复制过去
delete [ ] elem; //删除原来的表
elem=newbase; //指向新的表
size+=10;
}
ElemType *p,*q;
q=&elem[i-1];
for (p=&elem[len-1]; p>=q; - - p) //把第i个后面的元素往后挪一位
*(p+1)=*p;
*q=e;
++len; //元素个数加一
return true;
}
//删除第i个元素
templete <class ElemType>
bool SqList<ElemType>::Delete( ElemType &e , int i)
{
if (i<1 || i>len)
return false;
ElemType *p,*q;
p=&elem[i-1];
e=*p; //把要删除的元素返回给e
q=elem+len-1;
for (++p;p<=q;++p)
*(p-1)=*p;
len- -;
return true;
}
//顺序表遍历
templete <class ElemType>
void SqList<ElemType>::Traverse(void (*visit) (const ElemType &e )) const{ //参数为指向一个函数的指针
ElemType *p=elem;
for (int=0;i<len;i++)
visit(*p++); //具体操作由指向的函数决定
}
//赋值运算符=的重载
templete <class ElemType>
SqList<ElemType>&SqList<ElemType>::operator=(const SqList<ElemType>& r)
{
clear();
CopyFrom(r);
return *this;
}
// CopyFrom 函数,将顺序表r复制到当前顺序表的表尾
templete <class ElemType>
void SqList<ElemType>::CopyFrom( const SqList<ElemType>& r)
{
ElemType *p=r.elem;
for (int i=0;i<r.len;i++)
Append(*p++);
}
线性表操作函数
最新推荐文章于 2022-08-01 23:27:24 发布