前言
接上文(線性表與順序存儲結構(上))。
這些順序存儲結構的方法在順序表上下卷中已經提到過,但是有些許不同,可以為理解順序表提供更豐富的視角。(不過最主要的區別在于順序表上下卷中的順序表是動態開辟的而這里底層的是定長數組。)
正文
順序存儲結構的插入與刪除
獲得元素操作
對于線性表的順序存儲結構而言,要實現GetElem操作,即將線性表L中的第i個元素值返回,只要i的數值在數組下標范圍內,把數組第i-1下標的值返回即可:
#define OK 1
#define ERROR 0
typedef int Status;//Status是函數的返回值類型,其值是函數執行狀態代碼,如OK等//初始條件:順序線性表L已存在,1<=i<=ListLength(L)
//操作結果:用e返回L中第i個數據元素的值,注意i指的不是下標
Status GetElem(SqList L, int i, ElemType* e)//假設已有結構體類型SqList,元素類型ElemType
{if (L.length == 0 || i<1 || i>L.length)//無法成功獲取的各種情況{return ERROR;//獲取失敗}*e = L.data[i - 1];//得到元素值return OK;//獲取成功
}
注意
我們真正返回的數據其實是*e,而return的不過是函數處理的狀態,返回值類型Status是一個整型,返回OK即1,ERROR即0。
插入操作
在上篇文章中我們提到的ListInsert(*L,i,e),即在線性表L中的第i個位置插入新元素e,應該如何實現呢?
這有點像插隊,在某個位置插入數據,那么這個位置及之后的數據都得往后移動一位。
現在我們更具體和全面地來梳理一下插入算法的思路:
1.如果插入位置不合理,拋出異常;
2.如果線性表長度大于等于數組長度,則拋出異常或動態增加容量;
3.從最后一個元素開始向前遍歷到第i個位置,分別將它們都向后移動一個位置;
4.插入數據
5.表長加1(記錄當前長度的變量+1)
代碼參考:
刪除操作?
思路:
1.如果刪除位置不合理,拋出異常;
2.取出刪除元素;
3.從刪除元素位置開始遍歷到最后一個元素位置,分別將它們都向前移動一個位置;(注意與插入操作區分開來)
4.表長減1
代碼參考:?
本文到此結束,祝閱讀愉快^_^