資料結構
什麼是資料結構
資料結構是資料在電腦中儲存、組織的方式。當資料進到電腦時,我們要決定運用什麼邏輯去處理和資料在電腦中的順序及記憶體中的位置。舉例來說,在選擇裝水的容器時,會選擇以「杯子」去裝,選擇裝書的時候則會選擇「箱子」去裝。規劃良好的資料結構會讓程式跑起來更有效率。
常見的資料結構
1. 陣列(Array)
陣列的結構為一排緊密相鄰的可數記憶體,提供一個能直接存取任意資料內容的計算方法。特點如下:
- 通常用來儲存有序串列的相同資料於連續記憶空間
- 記憶體的配置是在編譯的時候完成
- 須事先宣告固定的記憶體空間,因此容易造成記憶體浪費
- 讀取與修改串列的資料時間是固定的
- 刪除或加入新元素需要移動大量資料
陣列可以用一排房屋來比喻,就像是一條路上的房屋們,每個房子代表一個儲存空間,房子的住址就是索引,只要知道住址,就能很輕易地找到房子,相對的,因為房子是剛開始就配置好,想要增加或移動當然也很困難。
2. 鏈結陣列(Linked List)
由相同資料型態按造特定的順序排列而成的線性串列。特點如下:
- 記憶體位置不連續,以隨機的方式儲存
- 因為不用事先定義好一塊連續的記憶體空間,所以插入或刪除資料都很方便
- 分為單向鏈結串列與雙向鏈結串列
- 每個節點知道下一個節點位置,但無法知道上一個節點位置,所以當想查詢特定節點時,必須從頭節點開始走訪
3. 堆疊(Stack)
- 堆疊是一種線性資料結構,遵循 "後進先出"(Last In, First Out,LIFO)的原則。這表示最後加入的元素會最先被移除。
- 堆疊常被比喻成像一疊盤子,你只能在頂端放置和取走盤子。
4. 佇列 (Queue)
佇列就好比到餐廳的排隊,先到的人先點餐,常被使用在 CPU 的工作排程,其特性如下:
- Fist In First Out 先進先出
- 需兩個指標,一個在前端一個在尾端
5. 樹狀結構 (Tree)
- 樹狀結構是一種非線性資料結構,由節點(nodes)和邊(edges)組成,用於描述層次結構的資料。
- 樹狀結構包括根節點、子節點、葉節點等,並可以有多個分支
- 常見的樹狀結構包括二叉樹、二叉搜尋樹、堆積、AVL 樹等
6. 圖形結構 (Graph)
- 圖形結構包含節點(稱為頂點)和邊(用於連接頂點的線)的數據結構,可以用於表示各種關係和網絡結構。
- 圖形可以是有向的或無向的,並可以包含權重,常被用於路由、社交網絡、地圖等場景。
7. 雜湊表 (Hash Table)
- 雜湊表是一種用於實現查找的數據結構,通過哈希函數將鍵映射到數組中的索引位置,以實現高效的查找操作。
- 雜湊表允許常數時間的查找、插入和刪除操作。