鍊錶的順序結構及其插入 刪除的問題

2021-08-15 07:14:38 字數 1854 閱讀 7869

1、線性表的順序儲存結構

指的是用一段位址連續的儲存單元依次儲存線性表的資料元素;

既然線hl表的每個資料元素的型別都相同,所以可用c語言(其他語言也相同)的一維陣列來實現順序儲存結構,即把第一              個資料兀素存到陣列下標為0的位置中,接著把線性表相鄰的元索儲存在陣列中相鄰的位置。

2、陣列的長度和鍊錶的長度的區別:

陣列的長度是存放線性表的儲存空間的長度,儲存分配後這個量是一般是不變的。

線性表的長度是線性表中資料元素的個數,隨著線性表插入和刪除操作的進行,這個量是變化的。在任意時刻,線性表的長度      應該小於等於陣列的長度。

由於我們數數都是從1開始數的,線性表的定義也不能免俗,起始也是1,可c 語言中的陣列卻是從〇開始第乙個下標的,於是線性表的第i個元素是要儲存在陣列 下標為i-1的位置。             

用陣列儲存順序表意味著要分配固定長度的陣列空間,由於線性表中可以進行插入和刪除操作,因此分配的陣列空間要大於等於當前線性表的長度。儲存器中的毎個儲存單元都有自己的編號,這個編號稱為位址。由於每個資料元素,不管它是整型、實型還是字元型,它都是需要佔 用一定的儲存單元空間的。假設占用的是c個儲存單元,那麼線性表中第i+1個資料 元素的儲存位置和第i個資料元素的儲存位置滿足下列關係(loc表示獲得儲存位置的函式)。

loc(ai+1) =loc(ai)) +c

所以對於第i個資料元素a,的儲存位置可以由ai推算得出:

loc(ai ) = loc(a1)+(i -1) * c

4、插入演算法的思路:

■如果插入位置不合理,丟擲異常;

■如果線性表長度大於等於陣列長度,則丟擲異常或動態增加容量;

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

■將要插入元素填入位置i處;

■表長加1。

實現的**:

status listlnsert (sqlist *l,int i,elemtypee)

l->data[i-1]=e;

m->length++;

return ok;

}5、順序結構的優缺點:

優點: 無須為表示表中元素之間的邏輯關係而增加額外的儲存空間

可以快速地訪問表中任一位置的元素。

缺點: 插入和刪除操作需要移動大量元素。

當線性表長度變化較大時,難以確定有儲空間的容量

造成儲存空間的「碎片」。

6、刪除演算法的思路:

■如果刪除位置不合理,丟擲異常;

■取出刪除元素;

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

■表長減1。

7、平均時間複雜度在最好,最壞,平均的情況下都是o(n)說明什麼?

線性表的順序儲存結構,在存、讀資料時,不管是哪個位置,時間複雜度都是o(n)。而插入或刪除時,時間複雜度都是o(n)。這就說明,它比較適合元素個數不太變化,而更多是訪問資料的應用。

8、 順序儲存結構需要三個屬性: 

儲存空間的起始位置:陣列 data , 它的儲存位置就是儲存空間的儲存位置; 

線性表的最大儲存容量; 

線性表的當前長度。

9、分析插入和刪除的時間複雜度:

最好的情況:插入或刪除的都是最後乙個元素,時間複雜度 o(1) 

最壞的情況:插入或刪除的都是第乙個元素,則所有其他元素都要進行移動,時間複雜度 o(n) 

平均的情況:插入或刪除第 i 個元素,需要移動 n - i 個元素,時間複雜度 o(n)

10、獲得元素操作:

對於線性表的順序儲存結構來說,如果我們要實現getelem操作,即將線性表l中的第i個位置元素值返回,其實是非常簡單的。就程式而言,只要i的數值在陣列下標範圍內,就是把陣列第i-1下標的值返回即可。

陣列與鍊錶的比較,鍊錶的建立及其插入刪除

陣列與鍊錶均為線性表,即乙個元素的前繼或後驅只有乙個元素,為資料結構的基礎。其中陣列與鍊錶相比,陣列具有按索引查詢方便的特點,其查詢的時間複雜度為o 1 而鍊錶查詢時最壞情況時,所查元素位於鍊錶末端,需查詢n次,時間複雜度為o n 鍊錶則具有插入刪除方便的特點,無論在什麼位置插入,只需將將其next...

鍊錶的插入 刪除

include include include define true 1 define false 0 define ok 1 typedef struct l list list,plist plist create list int len 建立乙個單鏈表 bool show list pli...

鍊錶的插入 刪除

雙向鍊錶的插入 第一步 首先找到插入位置,節點 s 將插入到節點 p 之前 第二步 將節點 s 的前驅指向節點 p 的前驅,即 s prior p prior 第三步 將節點 p 的前驅的後繼指向節點 s 即 p prior next s 第四步 將節點 s 的後繼指向節點 p 即 s next p...