中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

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

發布時間:2020-09-01 02:03:02 來源:網絡 閱讀:741 作者:BarnabyRoss 欄目:編程語言

  對于線性表,我們可以對其元素進行簡單的獲取,插入以及刪除操作。

  先來講講元素的獲取操作,完整來講,就是對,將線性表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)。

  那么順序存儲結構有什么優缺點呢?它的優點就是,存儲方式簡單,可以快速的存取表中任一位置的元素。而且,無需為其元素之間的邏輯關系而增加額外的存儲空間。

缺點就是,如果存儲元素過多,那么在執行插入以及刪除操作時,需要移動大量的元素,這樣非常的浪費運行時間。況且,由于不知道元素的具體個數,所以很難把握數組的大小,容易造成空間的浪費。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

九龙城区| 岑巩县| 沐川县| 孝义市| 漳州市| 宁城县| 屯门区| 沧州市| 中西区| 广东省| 桐城市| 浪卡子县| 荆门市| 朔州市| 平武县| 福鼎市| 邢台县| 松阳县| 柘城县| 肇州县| 玉环县| 泗水县| 犍为县| 布拖县| 油尖旺区| 元江| 融水| 呼图壁县| 于田县| 华坪县| 玉溪市| 封开县| 永州市| 北安市| 昌都县| 犍为县| 莲花县| 张家川| 丹棱县| 闽侯县| 西和县|