線性表的順序存儲結構元素的獲取,插入及刪除

  對於線性表,咱們能夠對其元素進行簡單的獲取,插入以及刪除操做。數組

  先來說講元素的獲取操做,完整來說,就是對,將線性表L第i個位置的元素返回,若成功,則返回1,且將第i個位置的元素的值賦給*e;若失敗,則返回0。代碼以下:ide

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;
}

如果在代碼中使用宏定義則是比較好的,由於方便數據的修改,如下代碼是宏定義版:spa

#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操做。代碼以下:it

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;

}

一樣的,再用宏定義的方式寫一遍代碼。代碼以下:class

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,則進行相應的刪除操做。代碼以下:List

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)。
移動

  那麼順序存儲結構有什麼優缺點呢?它的優勢就是,存儲方式簡單,能夠快速的存取表中任一位置的元素。並且,無需爲其元素之間的邏輯關係而增長額外的存儲空間。di

缺點就是,若是存儲元素過多,那麼在執行插入以及刪除操做時,須要移動大量的元素,這樣很是的浪費運行時間。何況,因爲不知道元素的具體個數,因此很難把握數組的大小,容易形成空間的浪費。
時間

相關文章
相關標籤/搜索