1. 程式人生 > 其它 >[資料結構] 常用資料結構

[資料結構] 常用資料結構

資料結構

陣列

是一種線性的資料結構,可以按照下標訪問與更新,儲存按照先後順序進行,記憶體中也按照這個順序存放。

初始化

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

addremove是一對,源自Collection

offerpoll是一對,源自Queue

pushpop是一對,源自Deque,其本質是棧(Stack類由於某些歷史原因,官方已不建議使用,使用Deque代替);

offerFirst/offerLastpollFirst/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) 返回一個由連結串列元素轉換型別而成的陣列。