Java面試--面試中的資料結構問題
面試中的資料結構問題
資料結構分類:
列表 型---1.陣列 2.連結串列 3.佇列 4.棧
陣列【詳解】
開闢一片連續的空間,將元素依次放入其中;
陣列的好處:可以進行隨機訪問,只需要一個下標就可以訪問到該元素;但插入和刪除會比較耗費時間,插入和刪除操作都需要將之後的元素進行整體的移動,騰出空間來進行對應的操作。
連結串列【詳解】
每一個節點通過 next 值連結起來;查詢元素耗費時間O(n),需要一個計數器,從表頭開始順著 next 依次往後找,數到第 n 個就可以將第 n 個元素取出來;但插入和刪除不會耗費時間,插入操作只需要將插入前後的兩個整合打斷,再將插入的元素連線起來即可;刪除操作只要將要刪除的元素跳過即可,
佇列【詳解】
不支援隨機訪問,只支援 push 和 pop 操作,push 將元素放進去,pop 將元素拿出來,拿出的順序是先進先出
棧【詳解】
不支援隨機訪問,只支援 push 和 pop 操作,push 將元素放進去,pop 將元素拿出來,拿出的順序是先進後出
樹 型---1.二叉樹 2.搜尋樹 3.優先佇列
二叉樹 【詳解】
每個節點最多有兩個孩子節點,分為左孩子節點和右孩子節點;
二叉樹要點:
1.二叉樹具有唯一的根節點;
2.二叉樹中每個節點最多有兩個孩子,每個節點最多有一個父親節點;一個孩子也沒有的叫做葉子節點
3.二叉樹具有天然的遞迴結構【每個節點的左子樹也是二叉樹、每個節點的右子樹也是二叉樹】
搜尋樹【詳解】
1.二分搜尋樹是二叉樹
2.二分搜尋樹的每個節點的值:大於其左子樹的所有節點的值且小於其右子樹的所有節點的值
3.二分搜尋樹的每個子樹也是二分搜尋樹
4.儲存的元素必須具有可比較性【儲存自定義資料型別,必須自定義好資料的比較方式】
優先佇列【詳解】
普通佇列:先進先出,後進後出
優先佇列:出隊順序和入隊順序無關;和優先順序相關;
總結:
圖 型---1.無向圖 2.有向圖
無向圖
每個節點之間沒有方向,可以從 a--b ,也可以 b--a ,但每個邊有權重
有向圖
所有的邊都是單向的,只能從 a--b,b不能到 a,要讓 b 到 a 則必須再加一條邊
有向無環圖
可以描述任務之間的層級關係,
相關演算法:深度優先遍歷【能夠看到圖的每個節點】
廣度優先遍歷【走迷宮,識別聯通塊】
拓撲排序【有很多先後的依賴關係,先做哪一個】
最短路徑/最小生成樹