順序處處結構的插入與刪除

1. 獲得元素操作

#define OK 1

#define ERROR 0

#define TRUE 1

#define FALSE 0

typedef int Status;

/*Status是函數的類型,其值是函數結果狀態碼,如OK等*/

/*初始條件:順序線性表L已存在,1<=i<=ListLength(L)*/

/*操作結果:用e返回L中第i個數據元素的值*/

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

if(L.length==0 || i<1 ||i>L.length)return ERROR;

*e = L.data[i-1];

return OK;

}

2. 插入操作

插入算法思路:

插入位置不合理,拋出異常;

如果線性表長度大於這個數組長度,則拋出異常或動態增加容量;

從最後一個元素開始向前遍歷到第i個位置,分別將它們都向後移動一個位置;

將要插入元素填入第i處;

表長加1。

實現代碼如下:

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

int k;

if(L->length == MAXSIZE) return ERROR;   /*順序線性表已滿*/

if (i<1 || i>L->length+1) return ERROR;   /*當 i 不在範圍內時*/

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;

}

3. 刪除操作

算法思路:

如果刪除位置不合理,拋出異常;

取出刪除元素;

從刪除元素開始遍歷到最後一個元素,分別將它們都向前移動一個位置;

表長減1。

實現代碼如下:

/*初始條件:順序線性表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;

}

時間複雜度分析:

存取數據時間複雜度爲O(1);

插入或刪除 時間複雜度爲O(n);

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章