线性表——顺序表现和实现

1.向当前线性表插入数据

Status ListInsert_Sq(SqList &L,int i,ElemType e)
{
if(i<1||i>L.length+1)
return ERROR;         //i不合格
if(L.length>=L.listsize)
{
newbase=(ElemType*)realloc(L.elem,
(L.listsize+LISTINCREMENT)*sizeof(ElemType));  //重新分配存储空间
if(!newbase)
exit(OVERFLOW);     //如果分配空间失败
L.elem=newbase;    //新基址
L.listsize+=LISTINCREMENT;  //增加存储容量
}
q=&(L.elem[i-1]);      //q为插入位置
for(p=&(L.elem[L.length-1]);p>=q;--p)
*(p+1)=*p;    //插入位置元素之后的元素全部后移
*q=e;            //插入元素
++L>length;  //表长加1
return OK;
}    

2.下面是删除线性表中的元素的操作

Status ListDelete_Sq(SqList &L,int i,ElemType &e)
{
    if((i<1)||(i>L.length))
        return ERROR;        //i值不合格
    p=&(L.elem[i-1]);        //要删除的地址
    e=*p;                    //要删除元素赋值给e
    q=L.elem+L.length-1;    //表尾元素位置
    for(++p;p<=q;++p)
        *(p-1)=*p;            //被删除元素之后的元素往前移
    --L.length;                //表长减1
    return OK;
}

 3.线性表中的元素合并操作

void MergeList_Sq(SqList La,SqList Lb,SqList &Lc)
{
    pa=La.elem;
    pb=Lb.elem;
    Lc.listsize=Lc.length=La.length+Lb.length;
    pc=Lc.elem=(ElemType*)malloc(Lc.listsize*sizeof(ElemType));
    if(!Lc.elem)
        exit(OVERFLOW);        //如果分配内存失败
    pa_last=La.elem+La.length-1;
    pb_last=Lb.elem+Lb.length-1;
    while(pa<=pa_last&&pb<=pb_last)        //合并
    {    
        if(*pa<=*pb)    *pc++=*pa++;
        else    *pc++=*pb++;    
    }
    while(pa<=pa_last)
        *pc++=*pa++;        //插入La的剩余元素
    while(Pb<=pb_last)        
        *pc++=*pb++;        //插入Lb的剩余元素
}
原文地址:https://www.cnblogs.com/droidxin/p/3617919.html