1、單鏈表
單鏈表的定義
線性表的鏈式儲存又稱單鏈表,它是指任意一組儲存單元來儲存線性表中的資料元素。
data(資料域)
next(指標域)
typedef
struct lnodelnode,
*linklist;
通常用頭指標來標識乙個單鏈表,如單鏈表l,頭指標為null時為空表。單鏈表在第乙個結點前附加乙個結點,稱為頭結點。頭結點的資料域可以不設任何值,也可以儲存表長等相關資訊。
頭結點和頭指標的區分:
不管帶不帶頭結點,頭指標始終指向鍊錶的第乙個結點。
引入頭結點可以帶來兩個優點:
1)由於開始結點的位置被存放在頭結點的指標域,所以在鍊錶的第乙個位置上的操作和在表中的其他位置的操作是一致的,無須特殊處理。
2)無論鍊錶是否為空,頭指標都指向頭結點的非空指標,因此空表和非空表也得到了統一。
單鏈表上基本操作的實現
1)採用頭插法建立單鏈表
} 每個結點插入時間為o(1
),則時間複雜度為o
(n)2)採用尾插法建立單鏈表該方法將新結點插入到當前鍊錶的表尾,為此必須增加乙個尾指標r。
linklist list_tailinsert
(linklist &l)
r->next=
null
:return l;
} 時間複雜度為o
(n),和頭插法相同
3)按序號查詢結點值
lnode *
getelem
(linklist l,
int i)
return p;
} 時間複雜度為o
(n)
4)按值查詢表結點
lnode *
locateelem
(linklist l,elemtype e)
return p;
} 時間複雜度o
(n)
5)插入結點操作
p=
getelem
(l,i-1)
; s-next=p-
>next;
//s為新結點
p->next=s;
三個語句的順序不可以亂
6)刪除結點操作
p=
getelem
(l,i-1)
;//找到被刪除結點的前驅結點
q=p-
>next;
p->next=q-
>next;
free
(q);
時間複雜度o
2、雙鏈表
雙鏈表的定義
單鏈表結點只有乙個指向其後的指標,使得單鏈表只能從頭結點依次順序的向後遍歷。為克服單鏈表缺點,引入雙鏈表,雙鏈表中有兩個指標prior和next,分別指向前驅和後繼結點。
*prior
data
*next
typedef
struct dnodednode,
*dlinklist;
雙鏈表的操作實現
1)雙鏈表的插入操作
2)雙鏈表的刪除操作
3、迴圈雙鏈表
迴圈雙鏈表的定義
迴圈雙鏈表l頭結點的prior指向表尾結點,表尾結點的next指向l。當迴圈雙鏈表為空時,其頭結點的prior和next都等於l。
4、靜態鍊錶
靜態鍊錶的定義
靜態鍊錶借助陣列來描述線性表的鏈式儲存,結點也有data和next
; 靜態鍊錶以next等於-
1作為結束
5、順序表和煉表的比較
1)儲存方式
順序表可以順序儲存也可以隨機儲存,鍊錶只能從表頭到表尾訪問元素。
2)邏輯結構和物理結構
採用順序儲存時,邏輯上相鄰的元素,對應物理儲存位置也相鄰。而採用鏈式儲存時,邏輯上上相鄰的元素,物理儲存位置不一定相鄰。
3)查詢、插入和刪除操作
對於按值查詢,順序表無序時,兩者的時間複雜度均為o(n)。順序表有序時,可採用折半查詢,時間複雜度為o(logn)。
對於按序號查詢,順序表支援隨機訪問,時間複雜度僅為o(1),而鍊錶的時間複雜度為o(n)。
資料結構考研筆記 線性表
1.線性表的定義 線性表是具有相同特性元素的乙個有限序列。所含元素個數 線性表長度。2.線性表的邏輯特性 只有乙個表頭元素,乙個表尾元素,表頭元素沒有前驅,表尾元素沒有後繼,其他元素只有乙個直接前驅,乙個直接後繼。3.線性表的儲存結構 1 順序儲存結構 順序表 隨機訪問特性 需占用連續的儲存空間 做...
考研資料結構 線性表
線性表是具有相同特徵資料元素的乙個有限序列。元素個數叫做線性表的長度,n n 0 表示,n 0 空表 只有乙個表頭元素,只有乙個表尾元素。表頭無前驅,表尾無後繼,除表頭和表尾外,其他元素只有乙個直接前驅,也只有乙個直接後繼。順序儲存結構 順序表 和鏈式儲存結構 鍊錶 兩種。順序表 連續儲存 順序儲存...
考研資料結構筆記 線性表概述
1.1 線性表的定義 線性表是具有相同特性的資料元素的乙個有限序列。該序列中所含元素的個數叫做線性表的長度。1.2 線性表的邏輯特性 只有乙個表頭元素,只有乙個表尾元素,表頭元素沒有前驅,表尾元素沒有後繼,除表頭和表尾元素元素之外,其他元素只有乙個直接前驅,也只有乙個直接後繼。1.3 線性表的儲存結...