线性表操作函数

//构造函数,分配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++);
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值