數據結構線性表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;
}

講完插入算法之后,刪除算法大家自己試着理解理解,有問題下方留言。

下一篇該講單鏈表了,謝謝大家!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM