考研筆記-數據結構-線性表-鏈表

線性表-鏈表

單鏈表

鏈表與順序表的區別是,鏈表開闢出一塊空間來存放指針

typedef struct LNode{
	ElemType data;
	struct LNode *next;
}LNode,*LinkList;

順序表和鏈表的比較

1.存取方式

順序表可以順序存取,也可以隨機存取,鏈表只能從表頭順序存取元素。

2.邏輯結構與物理結構

採用順序存儲時,邏輯上相鄰的元素,其對應的物理存儲位置也相鄰。而採用鏈式存儲時,邏輯上相鄰的元素,其物理存儲位置則不一定相鄰,其對應的邏輯關係是通過指針鏈接來表示的。請讀者注意區別存取方式和存儲方式。

3.查找插入和刪除操作

對於按值查找,順序表無序時,兩者的時間複雜度均爲0(n);順序表有序時,可採用折半查找,此時的時間複雜度爲0(log2n).
對於按序號查找,順序表支持隨機訪問,時間複雜度僅爲0(I),而鏈表的平均時間複雜度爲0(1).順序表的插入、刪除操作,平均需要移動半個表長的元素。鏈表的插入、刪除操作,只需修改相關結點的指針域即可。由於鏈表的每個結點都帶有指針域。因而在存儲空間上要比順序存儲付出的代價大,而存儲密度不夠大。

4.空間分配

順序存儲在靜態存儲分配情形下,- 旦存儲空間裝滿就不能擴充,若再加入新元素,則會出現內存溢出,因此需要預先分配足夠大的存儲空間。預先分配過大,可能會導致順序表後部大量閒置:預先分配過小,又會造成溢出。動態存儲分配雖然存儲空間可以擴充,但需要移動大量元素,導致操作效率降低,而且若內存中沒有更大塊的連續存儲空間,則會導致分配失敗。鏈式存儲的結點空間只在需要時申請分配,只要內存有空間就可以分配,操作靈活、高效。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章