線性表之鍊錶

2021-07-30 16:18:02 字數 2484 閱讀 3808

1,為什麼要使用鍊錶

1,順序表的長度是固定的,如果超出分配的長度就會造成溢位,如果存放的資料太少則會造成空間浪費。

2,在插入元素和刪除元素時(尤其不在尾部時),會移動大量的元素,造成效能和效率低下。

基於以上問題,使用鍊錶可以很好地避免順序表中出現的問題。這也是我們要使用鍊錶的原因。

2,鍊錶的儲存結構:

從上圖可以看出,單鏈表中的每個結點都包含乙個「資料域」和乙個「指標域」。「資料域」中包含當前結點的資料,「指標域」包含下一節點的儲存位址,頭指標head是指向開始結點的,結束結點沒有後繼結點,所以結束結點的指標域為空,即null。

3,鍊錶的常用操作及實現**

鍊錶常用的操作有:

1,插入結點到表頭

思路:將head頭指標的next指標給新增結點的next,然後將整個新增結點給head頭指標的next。因此時間複雜度為o(1)。

示意圖:

2,插入結點到表尾

思路:插入方法與插入到表頭一樣,只不過多乙個步驟就是通過head頭指標迴圈找到終端結點。因此時間複雜度為o(n)。

示意圖:

3,插入結點(1≤i≤listlength(l))

思路:插入方法與插入到表頭一樣,多迴圈查詢當前結點的動作。因此時間複雜度為o(n)。

示意圖:

4,刪除結點

思路:同插入結點一樣,時間複雜度為o(n)。

示意圖:

5,查詢結點

思路:與插入結點和刪除結點方法類似,時間複雜度為o(n)。

6,獲取鍊錶長度

思路:不像順序表是連續儲存的,獲取表的長度非常容易。在鍊錶中,資料不是連續儲存的,因此需要迴圈遍歷才能求得鍊錶的長度,所以時間複雜度為o(n)。

namespace ds.bll

/// /// 插入結點在表尾

///

///

///

///

///

public static nodeinsertend(nodehead, t data)

getlastnode(head).next = node;

return head;

}/// /// 插入結點(在包含關鍵字key的結點之後插入新的結點)

///

///

///

///

///

public static nodeinsert(nodehead,string key,funcwhere, t data) where w:icomparable

insert(head.next,key,where,data); //用遞迴繼續查詢下乙個結點

return head;

}/// /// 刪除結點(刪除包含關鍵字key的結點)

///

///

///

///

///

///

///

public static nodedelete(nodehead, string key, funcwhere) where w : icomparable

else

}delete(head.next,key,where); //使用遞迴繼續查詢

return head;

}/// /// 查詢結點(查詢包含關鍵字key的結點)

///

///

///

///

///

///

///

public static nodegetnodebykey(nodehead, string key, funcwhere) where w : icomparable

/// /// 獲取鍊錶長度

///

///

///

///

public static int getlength(nodehead)

return count;

}private static nodegetlastnode(nodehead)

}/// /// 封裝鍊錶

///

///

public class node

}

線性表之鍊錶

鏈式的線性表適用於經常進行刪除,插入操作的工作,如 訂票系統。鍊錶是用乙個乙個的節點連線起來的表,在物理上不是連續的,在邏輯上是連續的。通過節點間的指標指向來表示節點間的關係。所以在進行鍊錶操作之前,要先定義乙個節點結構。節點結構包含兩個東西 資料域,指標域。資料域就是用來存放資料的,指標域是用來表...

線性表之鍊錶

1.初始化 void initlist list plist assert plist null if plist null plist data 不使用 plist next null 2.頭插 bool insert head list plist,int val 時間複雜度為o 1 node ...

線性表之鍊錶

1 實驗專案一 線性表的基本操作及其應用 兩次實驗課完成 definition of sequential list typedef struct sqlist definition of linked list typedef struct lnodelnode,linklist 實驗要求 1 程...