---
# System prepended metadata

title: 'IT鐵人賽: 從零開始搞懂寫程式，資工系4年最重要的學科，資料結構，演算法，物件導向'
tags: [資料結構]

---

# IT鐵人賽: 從零開始搞懂寫程式，資工系4年最重要的學科，資料結構，演算法，物件導向
###### tags:`資料結構`

[老師的筆記](https://hackmd.io/@ashleylai/js-ds-algo)
[小組討論筆記](https://hackmd.io/cx_dw4hUSm6ioo3NAA4VwQ?both)
[Link-list鏈結串列](https://www.youtube.com/watch?v=VBpA6KtMTtw)
[[C/C++] 鏈結串列(Linked List)](https://pisces1026.wordpress.com/2017/09/21/cc-linked-list/)
[IT鐵人賽: 從零開始搞懂寫程式，資工系4年最重要的學科，資料結構，演算法，物件導向](https://www.youtube.com/watch?v=gA815MIEFg0&list=PLhxdaTcUMi3nRM5mtOdQgO4VEtAEsTiYd&index=16)

### 陣列(array)
* 分為一維陣列二維陣列三維陣列
* 用來儲存有序串列的相同資料型別於==連續記憶體空間==
* ==需事先宣告記憶體空間==因此容易造成記憶體浪費
* 讀取與修改串列的資料時間==很快==
* 刪除加入新元素==需要移動大量資料==

### 連結串列(Linked list)
* 記憶體位置==不連續==以隨機的方式儲存
* 因為==不用事先定義好一塊連續的記憶體空間==，所以插入刪除資料都很方便
* 當想查詢特定節點時，必須==從頭==節點開始走訪

### 堆疊(Stack)
Last In First Out (LIFO): 後進先出，後疊的(後進)，先拿走(先出)。
Fisrt In Last Out (FILO): 先進後出，先疊的(先進)，最後拿走(後出)。
放進: 放進stack 的尾巴(疊盤子) ==> push
拿出: 從 stack 的尾巴拿出來(拿盤子) ==> pop
看一下最上面的是甚麼 ==> peek
![](https://i.imgur.com/NU5qDVM.png)
![](https://i.imgur.com/ifDqOfM.png)
Linked List比Array更容易實做stack

### 行列、隊伍、佇列、排隊(Queue)
First In First Out (FIFO): 先進先出隊伍(Queue) 是一種 先進先出 的資料結構。 
Queue 的特性就是新增元素時發生在 Back後端，刪除元素時發生在 Front 前端。不像 Stack 新增刪除都是發生在頂端。
放進:放在最後面(排隊) ==> unshift enqueuing
拿出:先來的先出去(排隊) ==> shift dequeuing
![](https://i.imgur.com/ExgJLc2.png)
![](https://i.imgur.com/lYwReVJ.png)
![](https://i.imgur.com/QXlRux3.png)

### 集合(Set)
不能重複
可以取交集and
可以取聯集or
### 映射(Map)
key value


### 樹(tree)
degree兒子
sibling兄弟
level階層
![](https://i.imgur.com/F7zTBgt.png)
![](https://i.imgur.com/b9LJQeS.png)
![](https://i.imgur.com/OaYKH4B.png)
![](https://i.imgur.com/xPzF2JU.png)

![](https://i.imgur.com/LpYmP7N.png)
節點(node)每一個圈圈
根(root)A圈圈
葉節點(leaf)下面沒東西的JKLMN
父(parent)J的爸爸是E
子(child)E的孩子是JK
兄弟(siblings)J的兄弟KLMN

![](https://i.imgur.com/ATltCii.png)
levelorder tree traversal
從最上面開始
inorder tree traversal
從最左邊開始往右
==preorder tree traversal==
從根往右
==postorder tree traversal==
從下面開始走往右

圖graph:有迴路的樹
樹tree:沒有迴路的樹
二元樹binary tree:一個跟下面最多2個節點
完全二元樹complete tree:完全篩滿比較平衡
完滿樹full tree:
二元搜尋樹binarysearch tree:往左邊的比較小，往右邊得比較大
紅黑樹red black tree:比較像完滿樹


### 堆積(Heap)
上面小下面大(子孫比較大)
最小堆積min heap(上面最小)
最大堆積max heap(上面最大)

### 雜湊(hash)