数据结构线性表2----插入和删除算法

之前也说过数据结构是军师级别的东西,所以第一个元素下标是从1开始的!

今天我们说一说 顺序表的插入和删除算法

/* 初始条件:顺序线性表L已存在,1<=i<=ListLength(L)。 */
/* 操作结果:在L中第i个位置之前插入新的数据元素e,L长度+1。*/

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

    if( L->length == MAXSIZE )  // 顺序线性表已经满了
    {
        return ERROR;
    }
    if( i<1 || i>L->length+1)   // 当i不在范围内时
    {
        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;
}

  其实很多初学者如果直接复制这个代码是运行不了的,但是由于我个人的时间紧迫,我就不写完整的程序代码了,如果哪个萌新想了解所有的程序代码请下方留言,谢谢!

      其实这个算法一目了然,我就是和大家说一下算法思路,不如长度为50的数组,当前长度为7,所以写插入算法的时候要注意插入的位置必须在当前长度范围内,所以才有了一下的语句

 if( i<1 || i>L->length+1)   // 当i不在范围内时
    {
        return ERROR;
    }

第二点,比如你要在第五个位置插入数据,需要把data[5]的值改成要插入的数据,并把原来的data[5]和他之后的元素后后退一步。

/* 将要插入位置后数据元素向后移动一位 */
        for( k=L->length-1; k >= i-1; k-- )
        {
            L->data[k+1] = L->data[k];
        }

第三点,分清算法理念中的i从1开始,但是写c程序下标是从0开始的,或者这么说其实顺序表中的第一个元素在c语言中是

第0个元素,所以为了统一 你可以在c语言中表示为data[1-1];   广义为 第i个元素的表示方式[i-1]

L->data[i-1] = e;  // 将新元素插入

2.删除算法

/* 初始条件:顺序线性表L已存在,1<=i<=ListLength(L) */
/* 操作结果:删除L的第i个数据元素,并用e返回其值,L的长度-1 */
Status ListDelete(SqList *L, int i, ElemType *e)
{
    int k;

    if( L->length == 0 )
    {
        return ERROR;
    }
    if( i<1 || i>L->length )
    {
        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;
}

讲完插入算法之后,删除算法大家自己试着理解理解,有问题下方留言。

下一篇该讲单链表了,谢谢大家!

猜你喜欢

转载自www.cnblogs.com/zulkar/p/10973163.html
今日推荐