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