前面我們講過,鍊錶是一種很好的資料儲存方式,對於資料的插入和刪除效率都很高,一般我們常用的是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...