1.線性表定義
線性表(list):零個或多個資料元素的有限序列。
關鍵知識點:
1.首先它是乙個序列,元素之間室友順序的;
2.線性表強調的是有限的,元素個數是有限的;
3.在較複雜的線性表中,乙個資料元素可以由若干個資料項組成。
其數學定義:
若將線性表標記為(
a1,
…,ai-1
, ai
, ai+1
, …, a
n),則表中的
ai-1領先於
ai,ai領先於ai+1 ,稱ai-1是ai的直接前驅元素。ai+1是ai的直接後繼元素。
線性元素的個數n(n>=0)定義為線性表的長度,當n=0時稱為空表。
線性表知識框架
2.線性表的抽象資料型別
adt 線性表
data
線性表的資料物件集合為(a1, …,ai-1, ai, ai+1, …, an),每個元素的型別均為datetype。其中,除了第乙個元素a1外,每乙個元素都有且只有乙個直接前驅元素,除了最後乙個元素外,每乙個元素都有且只有乙個直接後繼元素。資料元素之間的關係是一對一的關係。
operation
initlist(*l); 初始化操作,建立乙個空的線性表l;
listempty(l); 若線性表l為空,返回true, 否則返回false;
clearlist(*l); 清空線性表;
getelem(l, i, *e); 將線性表l中的第i個位置的元素值返回給e;
在表中的序號表示成功,否則返回0表示失敗;
listdelete(*l, i, *e); 刪除線性表l中第i個位置的元素,並返回e;
listlength(l); 返回線性表l的元素個數;
endadt
3.線性表的順序儲存結構
順序儲存定義:
線性表的順序儲存結構,指的是用一段位址連續的儲存單元依次儲存線性表的資料元素。
線性表順序儲存的結構**:
#define maxsize 20 /*儲存空間的初始分配數量*/
typedef int elemtype; /*elemtype 型別根據實際情況定*/
typeof struct
sqlist;
注意 資料長度與線性表長度的區別
資料長度是指儲存線性表的儲存空間的長度,儲存分配後這個是一般不會改變的。
線性表的長度是線性表中元素的個數,隨著線性表的插入和刪除操作而變化。
在任意時刻,線性表的長度應該小於等於陣列的長度、
位址計算方法:
假設每個元素占用c個儲存單元,那麼線性表中第i個元素的儲存位置與i+1 個資料元素的的儲存位置的關係:
loc --- 獲得儲存位置的函式
loc(a
i+1 ) = loc(a
i)+ c
loc(a
i) = loc(a
1)+ (i-1)*c
4.順序儲存結構的插入與 刪除
線性表獲得元素的操作getelem(l, i, *e)
#define ok 1
#define error 0
#define true 1
#define false 0
typedef int status ;
/*status 是函式的型別,其值是函式結果的狀態**, 如ok 等*/
/*初始條件:順序線性表l已經存在,1=l.length)
return error;
*e = l.data[i-1];
return ok;
}
插入操作listinsert(*l, i, e);
演算法描述:
1. 如果插入位置不合理,丟擲異常;
2. 如果線性表長度大於陣列長度,則丟擲異常或者動態新增容量;
3. 從最後乙個元素開始向前遍歷到第i個位置,分別將他們向後移動乙個位置;
4. 將要插如的元素填入到位置i處;
5. 表長加1.
具體實現**:
/*初始條件:順序線性表已經存在,1=length == maxsize) /*順序線性表已經滿*/
return error;
if (i<1 || i> l->length+1) /*i不在範圍內*/
return error;
if (ilength)
l->data[i-1] = e;
l->length++;
return ok;
}
刪除操作 listdelete(*l, i, *e);
演算法描述
1. 如果刪除位置不合理,丟擲異常;
2. 取出刪除的元素;
3. 從刪除元素開始向前遍歷到最後乙個元素,分別將他們向前移動乙個位置;
4. 表長減1.
具體實現**:
/*初始條件:順序線性表已經存在,1=length == 0)/*線性表為空*/
return error;
if (i<1 || i> l->length) /*i不在範圍內*/
return error;
*e = l->length
if (ilength)
l->length++ ;
return ok;
}
插入和刪除的時間複雜度:由於元素插入到第i個位置,或者刪除第i個元素,需要移動n-i個元素。根據概率原理,每個位置插入或者刪除元素的可能性是一樣的。也就是說最終的平均移動次數和最中間那個元素的移動次數相等。都是(n-1)/2.因此平均時間複雜度為o(n)。
這表明:線性表的順序儲存結構,在儲存資料時,不管那個位置時間複雜度都是o(1),而在插入和刪除時,時間複雜度為o(n),說明它比較適合在元素個數不太變化,而更多是訪問資料的應用。
線性表順序儲存結構的優缺點:
優點: 1.無須為表示表中元素之間的邏輯觀念而增加額外的儲存空間。
2.可以快速地訪問表中任意位置的元素。
缺點: 1. 插入和刪除操作需要移動大量的元素。
2. 當線性表長度變化較大時,難以確定儲存空間的容量。
3.造成空間的「碎片」。
資料結構 線性表順序儲存結構
線性表是一種典型的線性結構。其基本特點是線性表中的資料元素是有序且是有限的。在這種結構中 存在乙個唯一的被稱為 第乙個 的資料元素 存在乙個唯一的被稱為 最後乙個 的資料元素 除第乙個元素外,每個元素均有唯一乙個直接前驅 除最後乙個元素外,每個元素均有唯一乙個直接後繼。線性表 linear list...
《資料結構 線性表》順序儲存
一 什麼是線性表?線性表定義 0個 或 多個 資料元素 有限 序列。序列 這個必須是有順序的,若元素存在多個,則第乙個元素無前驅,最後乙個元素無後驅。乙個元素只能有乙個前驅 後驅。有限 線性表必須是有限的,無限的只存在於數學中。線性表元素個數必須是 大於 0,當 n 0 時,稱為空表。二 線性表抽象...
資料結構 線性表順序儲存(順序表)
特點 線性表的順序儲存是指用一組位址連續的儲存單元依次儲存線性表中的各個元素。作用 線性表中在邏輯結構上相鄰的資料元素儲存在相鄰的物理儲存單元中,即通過資料元素 物理儲存的相鄰關係來反映 資料元素之間 邏輯上的相鄰關係 順序儲存的實現 一維陣列儲存順序表中的資料 缺點 大小固定,使用前需要分配位址,...