資料結構與演算法第 4 講 一步步帶你手寫鍊錶

2021-09-05 10:37:00 字數 2610 閱讀 1913

前面我們講過,鍊錶是一種很好的資料儲存方式,對於資料的插入和刪除效率都很高,一般我們常用的是jdk裡的鍊錶,很多人用的雖多,卻不一定都熟悉具體的寫法和邏輯,而且jdk為了相容性更好,難免在效率上進行妥協,如果你對效能有很高的要求,不妨根據自己的需求去手動實現乙個鍊錶。

第一步:首先建立乙個節點內部類

/**

* 節點

*/private static class node

}

第二部:我們建立無參的構造方法,和聲名頭尾節點,以及鍊錶大小

//頭節點

nodefirst;

//尾節點

nodelast;

//大小

int size;

第三部:加入我們需要的方法函式,比如新增方法,刪除方法

1.末尾新增資料

/**

* 新增資料在最後

*/public void add(e e)

/*** 新增到最後

* @param e

*/public void linklast(e e)else

size++;

}

2.獲取當前節點

/**

* 獲得當前位置的節點

* @param index

* @return

*/public e get(int index)

return node(index).item;

}/**

* 獲取index位置上的節點

* @param index

* @return

*/private nodenode(int index)

return node;

}else

return node;

}}

3.指定位置新增

/**

* 新增資料在指定位置

* @param index

* @param e

*/public void add(int index,e e)

if(size == index) else else

size++;

}}

4.指定位置刪除

/**

* 刪除指定節點

* @param index

*/public void remove(int index)

private void unlinknode(nodep) else

if(next==null)else

size--;

}

5.清空鍊錶

/**

* 清空鍊錶

*/public void clear()

first = last = null;

size = 0;

}

以上就是一些常用的方法函式,當然如果有更多的需求,可以自行新增,下面展示完整**

public class linkedlist

}public linkedlist()

//頭節點

nodefirst;

//尾節點

nodelast;

//大小

int size;

/*** 新增資料在最後

*/public void add(e e)

/*** 新增到最後

* @param e

*/public void linklast(e e)else

size++;

}/**

* 獲得當前位置的節點

* @param index

* @return

*/public e get(int index)

return node(index).item;

}/**

* 獲取index位置上的節點

* @param index

* @return

*/private nodenode(int index)

return node;

}else

return node;}}

/*** 新增資料在指定位置

* @param index

* @param e

*/public void add(int index,e e)

if(size == index) else else

size++;}}

/*** 刪除指定節點

* @param index

*/public void remove(int index)

private void unlinknode(nodep) else

if(next==null)else

size--;

}/**

* 清空鍊錶

*/public void clear()

first = last = null;

size = 0;

}}

一步步學資料結構與演算法 10 遞迴

1.遞迴是一種非常高效 簡潔的編碼技巧,一種應用非常廣泛的演算法,比如dfs深度優先搜尋 前中後序二叉樹遍歷等都是使用遞迴。2.方法或函式呼叫自身的方式稱為遞迴呼叫,呼叫稱為遞,返回稱為歸。3.基本上,所有的遞迴問題都可以用遞推公式來表示,比如 f n f n 1 1 f n f n 1 f n 2...

一步步學資料結構與演算法 20 雜湊演算法 上

帶著問題來學習 1.如何防止資料庫中的使用者資訊被脫庫?2.你會如何儲存使用者密碼這麼重要的資料嗎?僅僅 md5 加密一下儲存就夠了嗎?3.在實際開發中,我們應該如何用雜湊演算法解決問題?1.定義 將任意長度的二進位制值串對映成固定長度的二進位制值串,這個對映的規則就是雜湊演算法,而通過原始資料對映...

一步步學資料結構與演算法 09 佇列

1.先進者先出,這就是典型的 佇列 結構。2.支援兩個操作 入隊enqueue 放乙個資料到隊尾 出隊dequeue 從隊頭取乙個元素。3.所以,和棧一樣,佇列也是一種操作受限的線性表。1.佇列api public inte ce queue2.陣列實現 順序佇列 public class arra...