线性表操作函数

//构造函数,分配m个存储单元的顺序空间
templete
SqList::SqList(int m)
{
len =0 ;
if (m==0)
    elem=NULL;
else 
      elem = new ElemType [m];
size=m;
}
//顺序表复制
templete 
SqList::SqList(const SqList&r)
{
len =0;
size=0;
elem=NULL;
CopyFrom(r);
}
//顺序表结构销毁
templete 
SqList::~SqList()
{
delete[ ] elem;
}
//取顺序表中序号第i个的数据元素值
templete 
bool  SqList::GetElem(ElemType & e , int i ) const
{
if (i<1 || i>len)
   return false;
e= elem[i-1];    //给变量e
return true; 
}
//在顺序表中第i处存入数据元素e
templete 
SqList::~SqList()
{
if(i<1 || i>len)  return false;
elem[i-1]=e;  
return true;
}
//在顺序表中查找符合条件的数据元素
templete 
int  SqList::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 
bool  SqList::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=q; - - p)               //把第i个后面的元素往后挪一位
             *(p+1)=*p;
*q=e;
++len;                                               //元素个数加一
return true;
}
//删除第i个元素
templete 
bool  SqList::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 
void SqList::Traverse(void (*visit)  (const ElemType &e )) const{           //参数为指向一个函数的指针 
ElemType *p=elem;
for (int=0;i
 SqList&SqList::operator=(const  SqList& r)
{
clear();
CopyFrom(r);
return *this; 
}
//   CopyFrom 函数,将顺序表r复制到当前顺序表的表尾
templete 
void  SqList::CopyFrom( const  SqList& r)
{
ElemType *p=r.elem;
for (int i=0;i


你可能感兴趣的:(C/C++)