线性表的顺序存储结构元素的获取,插入及删除-创新互联

对于线性表,我们可以对其元素进行简单的获取,插入以及删除操作。

成都创新互联主要从事网站设计制作、成都网站建设、网页设计、企业做网站、公司建网站等业务。立足成都服务绩溪,十多年网站建设经验,价格优惠、服务专业,欢迎来电咨询建站服务:18980820575

  先来讲讲元素的获取操作,完整来讲,就是对,将线性表L第i个位置的元素返回,若成功,则返回1,且将第i个位置的元素的值赋给*e;若失败,则返回0。代码如下:

int GetElem ( SqList L, int i, int *e ){
    
    if ( i < 1 || i > L->length || L->length == 0 )
        return 0;
        
    *e = L->data[i-1];

    return 1;
}

若是在代码中使用宏定义则是比较好的,因为方便数据的修改,以下代码是宏定义版:

#define Ok     1
#define ERROR  0
#define TRUE   1
#define FALSE  0

typedef int Status;

Status GetElem ( SqList L, int i, ElemType *e ){
    
    if ( i < 1 || i > L->length || L->length == 0 )
        return ERROR;
        
    *e = L->data[i-1];
    
    return OK;

}

接下来就是对元素的插入操作。在插入元素之前,我们首先要判断插入元素的位置是否正确以及线性表的空间是否充足,若是都没问题,那么可以执行插入操作。记住,很重要的一点就是 ,插入一个元素后,一定要记得对线性表长度执行加1操作。代码如下:

int ListInsert ( SqList *L, int i, int e ){
    
    int k;
    
    if ( i < 1 || i > L->length + 1 )
        return 0;
    if ( L->length >= MAXSIZE )
        return 0;
    
    if ( i <= L->length )     //若插入数据位置不在表尾
        for ( k = L->length - 1; k >= i - 1; --k )
            L->data[k+1] = L->data[k];
        
    L->data[i-1] = e;
    
    L->length++;
    
    return 1;

}

同样的,再用宏定义的方式写一遍代码。代码如下:

Status ListInsert ( SqList *L, int i, ElemType e ){

    int k;

    if ( i < 1 || i > L->length + 1 )
        return ERROR;
    if ( L->length >= MAXSIZE )
        return ERROR;
        
    if ( i <= L->length )
        for ( k = L->length - 1; k >= i - 1; --k )
            L->data[k+1] = L->data[k];
    
    L->data[i - 1] = e;
    
    L->length++;
    
    return OK;

}

最后,就是对线性表进行元素的删除操作。删除相应位置的元素,首先就要判断所要删除位置是否正确,其次就是对线性表进行判断,表长是是否为0,若为0,则删除出错,若不为0,则进行相应的删除操作。代码如下:

int ListDelete ( SqList *L, int i, int *e ){

    int k;
    
    if ( i < 1 || i > L->length )
        return 0;
    if ( L->length == 0 )
        return 0;
     
     *e = L->data[i-1];   
    if ( i < L->length )      //如果删除的不是最后一个位置(删除的不是最后一个元素)
        for ( k = i; k < L->length; ++k )
            L->data[k-1] = L->data[k];
    
    L->length--;
    
    return 1;

}

删除元素的代码也用宏定义的方式写一遍。代码如下:

Status ListDelete ( SqList *L, int i, ElemType *e ){

    int k;
    
    if ( i < 1 || i > L->length )
        return ERROR;
    if ( L->length == 0 )
        return ERROR:
    
    *e = L->data[i-1];
    if ( i < L->length )
        for ( k = i; k < L->length; ++k )
            L-data[k-1] = L-data[k];
            
    L->length--;
    
    return OK;

}

很重要的一点是,一定要分清什么是元素位置,什么是元素下标。第i个位置的元素,它的下标是(i-1)。

  那么顺序存储结构有什么优缺点呢?它的优点就是,存储方式简单,可以快速的存取表中任一位置的元素。而且,无需为其元素之间的逻辑关系而增加额外的存储空间。

缺点就是,如果存储元素过多,那么在执行插入以及删除操作时,需要移动大量的元素,这样非常的浪费运行时间。况且,由于不知道元素的具体个数,所以很难把握数组的大小,容易造成空间的浪费。

另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


本文标题:线性表的顺序存储结构元素的获取,插入及删除-创新互联
URL链接:http://scyanting.com/article/popse.html