一、鍊錶是什麼?
單向鍊錶linked list:是一種在物理上非連續、非順序的資料結構,由若干節點(node)所組成。
而節點包括兩部分,一部分是存放資料的變數data,另一部分是指向下乙個節點的指標next。
鍊錶的第1個節點被稱為頭節點,最後1個節點被稱為尾節點,尾節點的next指標指向空。
注意:鍊錶分為帶頭節點的鍊錶 和 沒有頭節點的鍊錶。頭節點不存放資料內容。
陣列是連續儲存的,而鍊錶的各個節點不一定是連續儲存。
陣列能根據下標隨機訪問,而鍊錶只能從頭節點開始通過一級一級的節點去尋找。
陣列在記憶體中的儲存方式是順序儲存,鍊錶在記憶體中的儲存方式則是隨機儲存。
二、單向鍊錶的基本操作
鍊錶在查詢節點在查,煉表不像陣列那樣可以通過下標快速進行定位,只能從頭節點開始向後乙個乙個節點逐一查詢(遍歷)。--輔助指標
//heronode temp = head; //建立--輔助指標增加節點
//頭部插入---中間插入---尾部插入
//頭部插入和尾部插入---改變next屬性指向插入節點
//中間插入---使得 插入位置的上乙個元素的節點 指向 插入元素,而插入元素的 next 屬性指向上乙個元素原本的下乙個節點--利用輔助指標
boolean flag = false; //flag標誌新增的編號是否存在,預設false
while(true)
if(temp.next.no > node.no) else if(temp.next.no == node.no)
temp = temp.next; //繼續遍歷洗下乙個元素
}//--迴圈結束
//判斷flag的值
if(flag) else
//public void del(int index)刪除節點--節點無法自我刪除
if(index == temp.next.no)
temp = temp.next;
}//判斷是否要刪除節點
if(flag) else
}
//public void updatenode(heronode node)修改節點
//找到要修改的節點
if(temp.no == node.no)
temp = temp.next;//遍歷下乙個元素
}//根據flag值判斷是否修改節點
if(flag) else
}三、雙向鍊錶
雙向鍊錶:雙向鍊錶比單向鍊錶稍微複雜一些,它的每乙個節點除了擁有 data 和 next 指標,還擁有指向前置節點的 prev 指標。
管理單向鍊錶的缺點分析:
1). 單向鍊錶,查詢的方向只能是乙個方向,而雙向鍊錶可以向前或者向後查詢。
2). 單向鍊錶不能自我刪除,需要靠輔助節點,而雙向鍊錶,則可以自我刪除,所以前面我們單鏈表刪除時節點,總是找到temp,temp是待刪除節點的前乙個節點(認真體會)
雙向鍊錶的操作:
刪除:增加、更新:
修改:
//雙向鍊錶的查抄--和單向鍊錶相同,不過能雙向
//雙向鍊錶的增加--預設新增到雙向鍊錶的最後
//(1)先找到雙向鍊錶的最後這個節點
//(2)temp.next=newheronode 末尾節點指向插入節點
//(3)newheronode.pre=temp; 插入節點的pre屬性指向上乙個節點
煉表頭節點增加----temp.pre.next=temp.next
temp.next.pre=temp.pre;
單向鍊錶和雙向鍊錶
1.單向鍊錶 單向鍊錶只可向乙個方向遍歷。查詢乙個節點的時候需要從第乙個節點開始每次訪問下乙個節點,一直訪問到需要的位置。也可以提前把乙個節點的位置另外儲存起來,然後直接訪問。2.雙向鍊錶 可以從任何乙個節點訪問前乙個節點,也可以訪問後乙個節點,以至整個鍊錶。一般是在需要大批量的另外儲存資料在鍊錶中...
單向鍊錶和雙向鍊錶區別 雙向鍊錶
一開始確實被這個雙向鍊錶整暈了,node裡面不停套node,簡直無限套娃,讓人不知道該怎麼下手。後來看了資料結構與演算法分析這本書的 才算整明白。我把鍊錶分成了三個部分 第一部分是node.node是乙個由兩根指標,以及我們需要儲存的資料構成的結構體。這個node就是無限套娃的起源,也是鍊錶用於儲存...
鍊錶(單向鍊錶,雙向鍊錶)
首先鍊錶是以節點的方式儲存資料的,每個節點包含資料域 data 節點域 next 鍊錶的每個節點在計算機中儲存的位置是不連續的和隨機的,優點就是資料的插入和刪除比較好,而查詢資料效率不是太好 因為鍊錶無法像靜態資料一樣隨機讀取資料,必須按照順序找到對應的資料為止 單向鍊錶就像是火車,所有的節點串聯成...