Java資料結構和演算法(五) 鍊錶

2021-08-19 13:51:16 字數 2157 閱讀 2785



我們知道陣列是一種通用的資料結構,能用來實現棧、佇列等很多資料結構。而鍊錶也是一種使用廣泛的通用資料結構,它也可以用來作為實現棧、佇列等資料結構的基礎,基本上除非需要頻繁的通過下標來隨機訪問各個資料,否則很多使用陣列的地方都可以用鍊錶來代替。

但是我們需要說明的是,鍊錶是不能解決資料儲存的所有問題的,它也有它的優點和缺點。本篇部落格我們介紹幾種常見的鍊錶,分別是單向鍊錶、雙向鍊錶。

鍊錶(linked list)是一種常見的基礎資料結構,是一種線性表,但是並不會按線性的順序儲存資料,而是在每乙個節點裡存到下乙個節點的指標(pointer)。

使用鍊錶結構可以克服陣列鍊錶需要預先知道資料大小的缺點,鍊錶結構可以充分利用計算機記憶體空間,實現靈活的記憶體動態管理。但是鍊錶失去了陣列隨機讀取的優點,同時鍊錶由於增加了結點的指標域,空間開銷比較大。

單鏈表是鍊錶中結構最簡單的。乙個單鏈表的節點(node)分為兩個部分,第乙個部分(data)儲存或者顯示關於節點的資訊,另乙個部分儲存下乙個節點的位址。最後乙個節點儲存位址的部分指向空值。

單向鍊錶只可向乙個方向遍歷,一般查詢乙個節點的時候需要從第乙個節點開始每次訪問下乙個節點,一直訪問到需要的位置。而插入乙個節點,對於單向鍊錶,我們只提供在煉表頭插入,只需要將當前插入的節點設定為頭節點,next指向原頭節點即可。刪除乙個節點,我們將該節點的上乙個節點的next指向該節點的下乙個節點。

package com.ys.datastructure;

public class singlelinkedlist

//節點類

private class node

} //插入結點

public object addhead(object data)else

size++;

return data;

} //刪除頭結點

public object deletehead()else if(size == 1)else if(size > 1)

size--;

return data;

} //查詢節點

public node find(object data)else

} return null;

} //刪除指點節點

public boolean delete(object data)

if(data.equals(head.data))

node temp = head;

for(int i=0;i < size;i++)else

} return false;

} //判斷鍊錶是否為空

public boolean isempty()else

} //列印全部鍊錶

public void display()else if(size == 1)else

} }}

我們知道單向鍊錶只能從乙個方向遍歷,那麼雙向鍊錶它可以從兩個方向遍歷。

package com.ys.datastructure;

public class twowaylinkedlist

}public twowaylinkedlist()

//在煉表頭增加節點

public void addhead(object value)else

}//在鍊錶尾增加節點

public void addtail(object value)else

}//刪除煉表頭

public node deletehead()

return temp;

}//刪除鍊錶尾

public node deletetail()

return temp;

}//獲得鍊錶的節點個數

public int getsize()

//判斷鍊錶是否為空

public boolean isempty()

//顯示節點資訊

public void display()

while(tempsize>0)else if(node.next == null)else

node = node.next;

tempsize--;

}system.out.println();

}else

}}

Java資料結構 鍊錶

博主q q 656358805,歡迎線上交流!public class mylinklist public void addnode type data 預設在鍊錶最後新增乙個結點 addindex.next temp temp.pre addindex this.size system.out.p...

資料結構 Java鍊錶

package linktest class link 遞迴新增節點到尾部 param newnode public void addnode node newnode else 以上為內部類 private node root 定義根節點 呼叫內部類方法新增節點 param data public...

Java資料結構與演算法 五 雙向鍊錶

package com.fantj.datastruct.doublelistnode 雙向鍊錶,比雙端鍊錶多了乙個頭結點的指向 created by fant.j.2017 12 21 19 49 public class doublelinklist 插入乙個結點,在頭結點後進行插入 publi...