1Java學習筆記之資料結構 單鏈表

2021-07-29 13:19:25 字數 2087 閱讀 7096

前兩天找工作面試過程中,被一家搞大資料的問到了二叉樹、演算法相關的,本來大學時就沒學好,經過幾年的工作,平時用的更少,一下子看著題簡單,就是寫不上來。

因為工作中總是一上來不管什麼型別,就開始array,arraylist,hashmap,hashset就搞起了,好像就沒用過什麼的別的結構。雖然明知道這樣是不對的,但是那種懶勁上來,別的都不管了。最近危機感非常重,因為慢慢發現雖然會的框架越來越多,配的越來越溜,資料庫表設計也越來越規範,但是總感覺根基不穩。這種不穩的感覺來自於對框架底層的實現的漠視和資料結構的生疏。

資料結構學不好,則會導致在編碼中一些場合選型錯誤,效能低下,記憶體大。框架吃不透,設計模式不精,則會導致系統模組間耦合性高,難以修改,做不了大專案。

所以決定重拾一下之前落下的知識,從0再學一遍。找了本書,就按書的目錄來一篇一篇學習,記錄。供日後自己隨時檢視。

第一篇是單鏈表。

特點就是每次要找某個節點,都需要從頭開始遍歷,查詢效率低,不如陣列和arraylist能記錄節點的下標位置,根據下標位置直接就能找到。但是插入和刪除時效率高,因為只需要在被插入的位置移動乙個節點就可以了,而arraylist則需要移動所有的在被插入位置的後面元素,會整體往後推乙個位置。

下面來實現乙個簡單的單鏈表模型。

定義乙個節點類node,乙個屬性string用來存值,乙個node物件用來存下個節點。

package singlelink;

/** * created by wuwf on 2017/3/25.

*/public class node

public string getdata()

public void setdata(string data)

public node getnext()

public void setnext(node next)

}

再定義乙個linkedlist來代表這個單鏈表結構,裡面有新增到末尾,新增到某個位置等方法

package singlelink;

/** * created by wuwf on 2017/3/25.

* 單鏈表

*/public class linkedlist

public int size()

public void print()

node node = head;

while (node != null)

}/**

* 在末尾追加乙個節點

** @param node

*/public void add(node node)

//如果鍊錶為空,那新增的這個node就作為head

if (size == 0) else

last.setnext(node);

}size++;

}/**

* 在某個位置插入乙個節點

** @param index

* @param node

*/public void insert(int index, node node)

if (node == null)

//插頭部

if (index == 0) else

node.setnext(tempnode.getnext());

tempnode.setnext(node);

}size++;

}}

linkedlist裡定義了乙個屬性size來記錄鍊錶的總長度,裡面不能存在null的值。

head代表第乙個節點,如果head也為null,代表該鍊錶為空的。

add方法是在末尾追加乙個節點,這個比較好理解。做法就是從head到尾遍歷,然後在尾節點setnext(新節點)即可。

insert方法解釋一下,是在某個位置插入乙個節點。做法是先找到要被插入的位置的上乙個節點(父節點a),然後將新節點b作為a的next節點,再將原來的a的next作為新節點b的next即可。理解很容易,寫成**時還需要做一些越界和為空判斷。

我只寫了add和insert,只要這兩個理解了,那麼delete其實和add是一樣的步驟。

java 資料結構 學習筆記1

資料結構是對計算機記憶體中的資料的一種安排,資料結構包括 陣列,鍊錶,棧,二叉樹,雜湊表等,演算法則對對這些結構中的資料進行各種處理 下表簡單列了一下以後要用到的資料結構 陣列 優點 插入快,如果知道下標,可以快速的訪問,缺點 查詢 刪除慢 大小是固定的 有序陣列 優點 比無序陣列查詢快 缺點 刪除...

java資料結構之單鏈表

在單鏈表中對表頭進行插入或者刪除時,時間複雜度為o 1 單鏈表查詢指定節點時因為要進行迴圈查詢,平均需要查詢n 2次,所以時間複雜度為o n 儲存密度 資料占用的儲存量 整個結點占用的儲存量。根據這個公式可以得出單鏈表的儲存密度為大於1,在空間利用率上面比順序表要差 所以可以得出以下結論 單鏈表一般...

java資料結構之單鏈表

一 單鏈表的結點結構 node類 package data public class node public int getdata public void setdata int data public node getnext public void setnext node next 測試類 ...