[資料結構] 常用資料結構
資料結構
陣列
是一種線性的資料結構,可以按照下標訪問與更新,儲存按照先後順序進行,記憶體中也按照這個順序存放。
初始化
int[] ids = new int[] {xxx,xxx,xxx}
int ids [] = {xxx,xxx,xxx};
長度指定(必須二選一)
new String [2] //動態初始化
new String[] {"xx","xx"} // 靜態初始化
多維陣列
int arr [][] = {{xx, xx}, {xx, xx}, {xx, xx}}
// 可以省列數
int arr [][] = new int [3][]
Arrays類可以對陣列進行操作
.fill()
.sort()
對陣列排序 .equals()
比較陣列 .binarySearch()
查詢陣列
連結串列
常見: 單鏈表,雙向連結串列,迴圈連結串列
沒有空間限制,但是資料的查詢效率低
-
[1.反轉一個單鏈表。]
思路:
(1)通過輔助棧來完成
(2)定義一個新連結串列,然後使用頭插法,依次遍歷插入。
-
[2.返回中間節點,有2個返回第二個中間的節點]
-
[3.輸入一個連結串列,輸出該連結串列中倒數第k個結點。]
-
[4.合併兩個有序連結串列。]
-
[5.以給定值x為基準將連結串列分割成兩部分,所有小於x的結點排在大於或等於x的結點之前]
-
[6.在一個排序的連結串列中,存在重複的結點,請刪除該連結串列中重複的結點,重複的結點不保留,返回連結串列頭指標。]
-
[7.連結串列的迴文結構]
-
[8.給定一個連結串列,判斷連結串列中是否有環。]
思路:
(1)雜湊表
(2) 快慢指標,如果有環那麼兩個指標一定會相遇。
-
[9. 給定一個連結串列,返回連結串列開始入環的第一個節點。 如果連結串列無環,則返回 null]
-
[10. 輸入兩個連結串列,找出它們的第一個公共結點]
-
LRU快取
固定儲存空間,需要進行刪除的時候將最少訪問的資料進行刪除。
思路:
(1) 通過 HashMap + 雙向連結串列 實現
(2) 通過 繼承LinkedHashMap進行實現(只需重寫 removeEldest)
Java 實現 : LinkedList類
- LinkedList 實現 List 介面,能進行列表的相關操作。
- LinkedList 實現了 Queue 介面,可作為佇列使用。
- LinkedList 實現 Deque 介面,即能將LinkedList當作雙端佇列使用。
Collection介面提供 : add remove
add
和remove
是一對,源自Collection
;
offer
和poll
是一對,源自Queue
;
push
和pop
是一對,源自Deque
,其本質是棧(Stack
類由於某些歷史原因,官方已不建議使用,使用Deque
代替);
offerFirst/offerLast
和pollFirst/pollLast
是一對,源自Deque
,其本質是雙端佇列。
public boolean add(E e) | 連結串列末尾新增元素,返回是否成功,成功為 true,失敗為 false。 |
---|---|
public void add(int index, E element) | 向指定位置插入元素。 |
public boolean addAll(Collection c) | 將一個集合的所有元素新增到連結串列後面,返回是否成功,成功為 true,失敗為 false。 |
public boolean addAll(int index, Collection c) | 將一個集合的所有元素新增到連結串列的指定位置後面,返回是否成功,成功為 true,失敗為 false。 |
public void addFirst(E e) | 元素新增到頭部。 |
public void addLast(E e) | 元素新增到尾部。 |
public boolean offer(E e) | 向連結串列末尾新增元素,返回是否成功,成功為 true,失敗為 false。 |
public boolean offerFirst(E e) | 頭部插入元素,返回是否成功,成功為 true,失敗為 false。 |
public boolean offerLast(E e) | 尾部插入元素,返回是否成功,成功為 true,失敗為 false。 |
public void clear() | 清空連結串列。 |
public E removeFirst() | 刪除並返回第一個元素。 |
public E removeLast() | 刪除並返回最後一個元素。 |
public boolean remove(Object o) | 刪除某一元素,返回是否成功,成功為 true,失敗為 false。 |
public E remove(int index) | 刪除指定位置的元素。 |
public E poll() | 刪除並返回第一個元素。 |
public E remove() | 刪除並返回第一個元素。 |
public boolean contains(Object o) | 判斷是否含有某一元素。 |
public E get(int index) | 返回指定位置的元素。 |
public E getFirst() | 返回第一個元素。 |
public E getLast() | 返回最後一個元素。 |
public int indexOf(Object o) | 查詢指定元素從前往後第一次出現的索引。 |
public int lastIndexOf(Object o) | 查詢指定元素最後一次出現的索引。 |
public E peek() | 返回第一個元素。 |
public E element() | 返回第一個元素。 |
public E peekFirst() | 返回頭部元素。 |
public E peekLast() | 返回尾部元素。 |
public E set(int index, E element) | 設定指定位置的元素。 |
public Object clone() | 克隆該列表。 |
public Iterator descendingIterator() | 返回倒序迭代器。 |
public int size() | 返回連結串列元素個數。 |
public ListIterator listIterator(int index) | 返回從指定位置開始到末尾的迭代器。 |
public Object[] toArray() | 返回一個由連結串列元素組成的陣列。 |
public T[] toArray(T[] a) | 返回一個由連結串列元素轉換型別而成的陣列。 |