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...