欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

线性表基本操作——删除,插入等

程序员文章站 2022-07-14 19:49:55
...

第二章

线性表基本操作

(类C语言描述)

若一个元素占p个字节,则线性表第i个元素ai的存储位置,LOC(ai) = LOC(a1) + (i-1)*p;

线性表动态分配内存

#define LIST_INIT_SIZE 100  //线性表初始内存分配量
#define LISTINCREMENT 10    //线性表存储分配量
typedef struct{
      ElemType *elem;
      int    length;
      int    listsize;
}SqList;

删除一个元素

Status ListDelete_Sq(SqLiist &L,int i,ElemType &e)
{
    if((i<1)||(i>L.Length)) return ERROR;
    p = &(L.elem[i-1]);   //被删除元素位置
    e = *p;               //表尾元素位置
    q = L.elem + L.length -1;
    for(++p;p<=q;++p)  *(p-1) = *p;//被删除元素左移
    --L.Length;
    return ok;
}

插入一个元素

Status ListInsert_Sq(SqLiist &L,int i,ElemType &e)
{//于顺序表第i个位置之前插入新元素
    if((i<1)||(i>L.Length)) return ERROR;
    if(L.Length >= L.Listsize)
    {
        newbase = (ElemType *)realloc(L.elem,(L.LISTINCREMENT)*sizeof(ElemType));
        if(!newbase)  exit(OVREFLOW);
        L.elem = newbase;               //新基址
        L.Listsize += LISTINCREMENT;    //增加存储容量
    }

    q = &(L.elem[i-1]);   //q为插入的位置
    for(p=&(L.elem[Length-1]);p>=q;--p) 
        *(p + 1) = *p;
    *q =e;
    ++ L.length;
    return ok;
}