陣列與鍊錶均為線性表,即乙個元素的前繼或後驅只有乙個元素,為資料結構的基礎。
其中陣列與鍊錶相比,陣列具有按索引查詢方便的特點,其查詢的時間複雜度為o(1),而鍊錶查詢時最壞情況時,所查元素位於鍊錶末端,需查詢n次,時間複雜度為o(n)。
鍊錶則具有插入刪除方便的特點,無論在什麼位置插入,只需將將其next指標改變即可,不需要改變其他元素的位置,而對於陣列,則需將其後繼元素全部向後移動乙個單位,再將元素填入。
鍊錶在建立前,需要定義node的結構體,設定其get、set方法
node的構成有next指標域,和data資料域。
class
node
private object data;
public object getdata()
public
node
(object data)
public
node()
}
結點建立結束後,進行鍊錶的建立,鍊錶建立時一般定義其「頭結點」或「根節點」。它無具體資料,用來表示第乙個元素。
class
linkedlist
鍊錶的新增方法,(該方法採用頭插法,即在頭結點之後插入)
public
void
link_add
(object data)
鍊錶的插入方法,根據插入的位置進行結點變更,然後進行插入:
public
void
link_insert
(int index,object data)
pnode.next=node.next;
node.next=pnode;
system.out.
println
("插入成功");
}
鍊錶的刪除方法,根據要刪除的資料內容進行比較,若無資料則丟擲異常:
public
void
link_delete
(object data)
if(node.next.
getdata()
==data)
else
if(node.next==null) system.out.
println
("資料不存在");
}catch
(exception e)
}
鍊錶列印,因新增時為頭插法,因此與插入順序相反:
public
void
link_print
(linkedlist linkedlist)
完整**:
package list;
class
node
private object data;
public object getdata()
public
node
(object data)
public
node()
}class
linkedlist
public
void
link_add
(object data)
public
void
link_insert
(int index,object data)
pnode.next=node.next;
node.next=pnode;
system.out.
println
("插入成功");
}public
void
link_delete
(object data)
if(node.next.
getdata()
==data)
else
if(node.next==null) system.out.
println
("資料不存在");
}catch
(exception e)
}public
void
link_print
(linkedlist linkedlist)
system.out.
println
("--------------------------");
}public
static
void
main
(string[
] args)
}
輸出結果:
陣列與鍊錶的比較
陣列,在記憶體上給出了連續的空間.鍊錶,記憶體位址上可以是不連續的,每個鍊錶的節點包括原來的記憶體和下乙個節點的資訊 單向的乙個,雙向鍊錶的話,會有兩個 陣列優於鍊錶的 1.記憶體空間占用的少,因為鍊錶節點會附加上一塊或兩塊下乙個節點的資訊.但是陣列在建立時就固定了.所以也有可能會因為建立的陣列過大...
C 鍊錶及其建立
鍊錶是由一系列連線在一起的結點構成,其中的每個結點都是乙個資料結構。鍊錶的結點通常是動態分配 使用和刪除的,允許鍊錶在程式執行時增大或縮小。如果需要將新資訊新增到鍊錶中,則程式只需分配另乙個結點並將其插入到系列中。如果需要從鍊錶中刪除特定的資訊塊,則程式將刪除包含該資訊的結點。儘管鍊錶的編碼和管理比...
鍊錶2(鍊錶的建立與遍歷)
現有有n個學生的資料記錄,每個記錄包括學號 姓名 三科成績。編寫乙個函式input,用來輸入乙個學生的資料記錄。編寫乙個函式print,列印乙個學生的資料記錄。在主函式呼叫這兩個函式,讀取n條記錄輸入,再按要求輸出。n 100 include typedef struct student stude...