1οΈβ£ μλ£κ΅¬μ‘°(Data Structure)
μλ£κ΅¬μ‘°(Data Structure)λ λ°μ΄ν°λ₯Ό ν¨μ¨μ μΌλ‘ μ μ₯νκ³ κ΄λ¦¬νλ©°, μ΄λ₯Ό ν΅ν΄ λ°μ΄ν°λ₯Ό ν¨μ¨μ μΌλ‘ μ κ·Όνκ³ μμ ν μ μλλ‘ νλ 체κ³μ μΈ λ°©λ²μ λλ€.
μλ£κ΅¬μ‘°λ μκ³ λ¦¬μ¦μ μ±λ₯μ μ΅μ ννκ³ νλ‘κ·Έλ¨μ ν¨μ¨μ±μ ν₯μμν€λ λ° μ€μν μν μ ν©λλ€.
κΈ°λ³Έ κ°λ .
μλ£κ΅¬μ‘°λ λ°μ΄ν°λ₯Ό μ μ₯νλ λ°©μκ³Ό λ°μ΄ν°λ₯Ό μ‘°μνλ λ°©λ²μ μ μν©λλ€.
μ΄λ λ°μ΄ν°λ₯Ό μ΄λ»κ² λ°°μ΄νκ³ , μ κ·Όνκ³ , μμ νκ³ , μμ ν μ§λ₯Ό κ·μ νλ κ·μΉκ³Ό λ°©λ²μ μ§ν©μ λλ€.
μ£Όμ λͺ©μ .
-
ν¨μ¨μ μΈ λ°μ΄ν° μ μ₯ λ° μ κ·Ό.
- λ°μ΄ν°λ₯Ό ν¨μ¨μ μΌλ‘ μ μ₯νμ¬ λΉ λ₯΄κ² μ κ·Όνκ³ κ²μν μ μλλ‘ ν©λλ€.
-
λ°μ΄ν° μμ λ° μμ μ©μ΄.
- λ°μ΄ν°λ₯Ό μ½κ² μμ νκ³ μμ ν μ μλλ‘ ν©λλ€.
-
μκ³ λ¦¬μ¦ μ΅μ ν.
- μκ³ λ¦¬μ¦μ μ±λ₯μ μ΅μ ννκ³ μ€ν μκ°μ λ¨μΆμν΅λλ€.
μ£Όμ μ’ λ₯.
-
λ°°μ΄(Array)
- κ³ μ λ ν¬κΈ°μ μ°μλ λ©λͺ¨λ¦¬ 곡κ°μ λ°μ΄ν°λ₯Ό μ μ₯ν©λλ€.
- μΈλ±μ€λ₯Ό μ¬μ©νμ¬ λ°μ΄ν°μ λΉ λ₯΄κ² μ κ·Όν μ μμ΅λλ€.
-
μ°κ²° 리μ€νΈ(Linked List)
- κ° μμκ° λ°μ΄ν°μ λ€μ μμλ₯Ό κ°λ¦¬ν€λ ν¬μΈν°λ₯Ό ν¬ν¨ν©λλ€.
- λμ ν¬κΈ° μ‘°μ μ΄ κ°λ₯νλ©° μ½μ κ³Ό μμ κ° μ©μ΄ν©λλ€.
-
μ€ν(Stack)
- νμ μ μΆ(LIFO, Last In First Out) λ°©μμΌλ‘ λμν©λλ€.
- λ°μ΄ν°λ₯Ό μ½μ νλ pushμ μμ νλ pop μ°μ°μ κ°μ§λλ€.
-
ν(Queue)
- μ μ μ μΆ(FIFO, First In First Out) λ°©μμΌλ‘ λμν©λλ€.
- λ°μ΄ν°λ₯Ό μ½μ νλ enqueueμ μμ νλ dequeue μ°μ°μ κ°μ§λλ€.
-
νΈλ¦¬(Tree)
- κ³μΈ΅μ ꡬ쑰λ₯Ό κ°μ§λ©°, λ Έλμ μμ§λ‘ ꡬμ±λ©λλ€.
- μ΄μ§ νΈλ¦¬, μ΄μ§ νμ νΈλ¦¬, AVL νΈλ¦¬ λ± λ€μν ννκ° μμ΅λλ€.
-
κ·Έλν(Graph)
- λ Έλ(μ μ )μ μμ§(κ°μ )λ‘ κ΅¬μ±λ μλ£κ΅¬μ‘°λ‘, λ€μν κ΄κ³λ₯Ό ννν μ μμ΅λλ€.
- λ°©ν₯ κ·Έλν, 무방ν₯ κ·Έλν λ±μ΄ μμ΅λλ€.
-
ν΄μ ν
μ΄λΈ(Hash Table)
- ν€-κ° μμ μ μ₯νλ©°, ν΄μ ν¨μλ₯Ό μ¬μ©νμ¬ λ°μ΄ν°μ λΉ λ₯΄κ² μ κ·Όν μ μμ΅λλ€.
- μΆ©λ ν΄κ²° λ°©λ²μΌλ‘ 체μ΄λκ³Ό κ°λ°© μ£Όμλ²μ΄ μμ΅λλ€.
μμ© μ¬λ‘.
μλ£κ΅¬μ‘°λ λ°μ΄ν°λ² μ΄μ€, μ΄μ체μ , λ€νΈμν¬, μΈκ³΅μ§λ₯, κ²μ κ°λ° λ± λ€μν λΆμΌμμ μ€μν μν μ ν©λλ€.
μ μ ν μλ£κ΅¬μ‘°μ μ νμ νλ‘κ·Έλ¨μ μ±λ₯κ³Ό ν¨μ¨μ±μ ν¬κ² ν₯μμν¬ μ μμ΅λλ€.
2οΈβ£ μλ£κ΅¬μ‘°μ λΆλ₯
1οΈβ£ μ ν μλ£κ΅¬μ‘°(Linear Data Structure)
μ ν μλ£κ΅¬μ‘°(Linear Data Structure)λ λ°μ΄ν° μμλ€μ΄ μμ°¨μ μΌλ‘ λ°°μ΄λ ꡬ쑰λ₯Ό μλ―Έν©λλ€.
μ΄ μλ£κ΅¬μ‘°μμλ λ°μ΄ν° μμλ€μ΄ μ§μ ννλ‘ μ°κ²°λμ΄ μμΌλ©°, κ° μμλ ν λ€μ μμλ μ΄μ μμμ μ°κ²°λμ΄ μμ΅λλ€.
μ ν μλ£κ΅¬μ‘°μ μ£Όμ νΉμ§μΈ λ°μ΄ν° μμλ€μ΄ ν μ€λ‘ λ°°μ΄λμ΄ μλ€λ μ μ λλ€.
μ£Όμ μ ν μλ£κ΅¬μ‘°λ₯΄λ λ°°μ΄, μ°κ²° 리μ€νΈ, μ€ν, ν λ±μ΄ μμ΅λλ€.
μ£Όμ μ ν μλ£κ΅¬μ‘°.
-
λ°°μ΄(Array)
- μ μ : λμΌν νμ μ λ°μ΄ν° μμλ€μ΄ μ°μλ λ©λͺ¨λ¦¬ 곡κ°μ μ μ₯λλ μλ£κ΅¬μ‘°μ λλ€.
- νΉμ§ : κ³ μ λ ν¬κΈ°λ₯Ό κ°μ§λ©° μΈλ±μ€λ₯Ό ν΅ν΄ λ°μ΄ν°μ λΉ λ₯΄κ² μ κ·Όν μ μμ΅λλ€.
- μμ : μ μν λ°°μ΄, λ¬Έμμ΄ λ°°μ΄ λ±.
-
μ°κ²° 리μ€νΈ(Linked List)
- μ μ : κ° λ°μ΄ν° μμκ° λ Έλλ‘ κ΅¬μ±λκ³ , κ° λ Έλλ λ°μ΄ν°μ λ€μ λ Έλλ₯Ό κ°λ¦¬ν€λ ν¬μΈν°λ₯Ό ν¬ν¨νλ μλ£κ΅¬μ‘°μ λλ€.
- νΉμ§ : λμ ν¬κΈ° μ‘°μ μ΄ κ°λ₯νλ©° μ½μ κ³Ό μμ κ° μ©μ΄νμ§λ§, μΈλ±μ€λ₯Ό ν΅ν μ κ·Όμ λ°°μ΄λ³΄λ€ λ립λλ€.
- μ’ λ₯ : λ¨μΌ μ°κ²° 리μ€νΈ, μ΄μ€ μ°κ²° 리μ€νΈ, μν μ°κ²° 리μ€νΈ λ±.
-
μ€ν(Stack)
- μ μ : νμ μ μΆ(LIFO, Last In First Out) λ°©μμΌλ‘ λμνλ μλ£κ΅¬μ‘°μ λλ€.
- νΉμ§ : λ°μ΄ν° μ½μ (push)κ³Ό μμ (pop)μ΄ νμͺ½ λμμλ§ μ΄λ£¨μ΄μ§λλ€.
- μ¬μ© μ¬λ‘ : ν¨μ νΈμΆ μ€ν, μμ λ¬Έμμ΄ μ²λ¦¬ λ±.
-
ν(Queue)
- μ μ : μ μ μ μΆ(FIFO, First In First Out) λ°©μμΌλ‘ λμνλ μλ£κ΅¬μ‘°μ λλ€.
- νΉμ§ : λ°μ΄ν°μ μ½μ (enqueue)μ νμͺ½ λ(νλ¨)μμ, μμ (dequeue)λ λ°λμͺ½ λ(μ λ¨)μμ μ΄λ£¨μ΄μ§λλ€.
- μ’ λ₯ : μν ν, μ°μ μμ ν, λ±(Deque) λ±.
- μ¬μ© μ¬λ‘ : μ΄μ 체μ μ μμ μ€μΌμ€λ§, νλ¦°ν° λκΈ°μ΄ λ±.
μ ν μλ£κ΅¬μ‘°μ νΉμ§ λ° μ₯λ¨μ .
-
νΉμ§.
- μμ°¨μ μ κ·Όμ΄ κ°λ₯νλ©°, λ°μ΄ν°λ₯Ό μ°¨λ‘λλ‘ μ²λ¦¬ν λ μ 리ν©λλ€.
- λ©λͺ¨λ¦¬μμ μ°μμ μΌλ‘ λ°°μΉλλ―λ‘ μΈλ±μ€λ₯Ό ν΅ν΄ μ§μ μ κ·Όν μ μμ΅λλ€.(λ°°μ΄μ κ²½μ°)
-
μ₯μ .
- κ°λ¨νκ³ κ΅¬νμ΄ μ©μ΄ν©λλ€.
- λ°μ΄ν°μ μ½μ κ³Ό μμ κ° νΉμ 쑰건 νμ ν¨μ¨μ μΌ μ μμ΅λλ€(μ: μ€ν, ν)
-
λ¨μ
- λ°μ΄ν° ν¬κΈ°μ λ°λΌ λ©λͺ¨λ¦¬ λλΉκ° λ°μν μ μμ΅λλ€(λ°°μ΄μ κ²½μ°).
- νΉμ μμ μ κ·Όμ΄λ μ½μ /μμ μ μ±λ₯μ΄ μ νλ μ μμ΅λλ€(μ°κ²° 리μ€νΈμ κ²½μ°)
λ§λ¬΄λ¦¬.
μ ν μλ£κ΅¬μ‘°λ λ°μ΄ν°κ° μμ°¨μ μΌλ‘ μ°κ²°λμ΄ μμ΄ μμ°¨μ μ²λ¦¬μ μ ν©νλ©°, νλ‘κ·Έλ¨μ λ€μν λΆλΆμμ μ¬μ©λλ κΈ°μ΄μ μΈ μλ£κ΅¬μ‘°μ λλ€.
2οΈβ£ λΉμ ν μλ£κ΅¬μ‘°(Non-linear Data Structure)
λΉμ ν μλ£κ΅¬μ‘°(Non-linear Data Structure)λ λ°μ΄ν° μμλ€μ΄ κ³μΈ΅μ λλ κ·Έλ¬Ό ννλ‘ λ°°μ΄λ ꡬ쑰λ₯Ό μλ―Έν©λλ€.
μ΄ μλ£κ΅¬μ‘°μμλ λ°μ΄ν° μμλ€μ΄ μμ°¨μ μΌλ‘ λ°°μ΄λμ§ μκ³ , νλμ μμκ° μ¬λ¬ μμλ€κ³Ό μ°κ²°λ μ μμ΅λλ€.
μ£Όμ λΉμ ν μλ£κ΅¬μ‘°λ‘λ νΈλ¦¬(Tree)μ κ·Έλν(Graph)κ° μμ΅λλ€.
μ£Όμ λΉμ ν μλ£κ΅¬μ‘°.
-
νΈλ¦¬(Tree)
- μ μ : λ Έλμ κ·Έ λ Έλλ€μ μ°κ²°νλ κ°μ μΌλ‘ ꡬμ±λ κ³μΈ΅μ μλ£κ΅¬μ‘°μ λλ€. νΈλ¦¬λ λ£¨νΈ λ Έλμμ μμνμ¬ μμ λ Έλλ‘ λΆκΈ°νλ©°, μ¬μ΄ν΄μ΄ μμ΅λλ€.
- νΉμ§ : νΈλ¦¬λ κ³μΈ΅μ κ΄κ³λ₯Ό λνλ΄λ©°, κ° λ Έλλ 0κ° μ΄μμ μμ λ Έλλ₯Ό κ°μ§ μ μμ΅λλ€.
-
μ’
λ₯ :
- μ΄μ§ νΈλ¦¬(Binary Tree) : κ° λ Έλκ° μ΅λ λ κ°μ μμ λ Έλλ₯Ό κ°μ§λ νΈλ¦¬μ λλ€.
- μ΄μ§ νμ νΈλ¦¬(Binary Search Tree) : μΌμͺ½ μμμ λΆλͺ¨λ³΄λ€ μκ³ , μ€λ₯Έμͺ½ μμμ λΆλͺ¨λ³΄λ€ ν° κ°μ κ°μ§λ μ΄μ§ νΈλ¦¬μ λλ€.
- κ· ν μ΄μ§ νΈλ¦¬(Balanced Binary Tree) : AVL νΈλ¦¬, λ λ-λΈλ νΈλ¦¬ λ±κ³Ό κ°μ΄ λμ΄κ° κ· νμ μ΄λ£¨λλ‘ μ μ§λλ νΈλ¦¬μ λλ€.
- ν(Heap) : μμ μ΄μ§ νΈλ¦¬μ μΌμ’ μΌλ‘, μ΅λ νκ³Ό μ΅μ νμ΄ μμ΅λλ€.
- νΈλΌμ΄(Trie) : λ¬Έμμ΄μ μ μ₯νκ³ λΉ λ₯΄κ² κ²μνκΈ° μν΄ μ¬μ©λλ νΈλ¦¬μ λλ€.
-
κ·Έλν(Graph)
- μ μ : μ μ (Vertex)λ€κ³Ό μ΄ μ μ λ€μ μ°κ²°νλ κ°μ (Edge)λ€λ‘ ꡬμ±λ μλ£κ΅¬μ‘°μ λλ€.
- νΉμ§ : κ·Έλνλ λ°©ν₯ κ·Έλν(Directed Graph)μ 무방ν₯ κ·Έλν(Undirceted Graph)λ‘ λλ μ μμΌλ©°, μ¬μ΄ν΄μ΄ μ‘΄μ¬ν μ μμ΅λλ€.
-
μ’
λ₯ :
- λ°©ν₯ κ·Έλν(Directed Graph) : κ°μ μ λ°©ν₯μ±μ΄ μλ κ·Έλνμ λλ€.
- 무방ν₯ κ·Έλν(Undirected Graph) : κ°μ μ λ°©ν₯μ±μ΄ μλ κ·Έλνμ λλ€.
- κ°μ€μΉ κ·Έλν(Weighted Graph) : κ°μ μ κ°μ€μΉκ° λΆμ¬λ κ·Έλνμ λλ€.
- λΉκ°μ€μΉ κ·Έλν(Unweighted Graph) : κ°μ μ κ°μ€μΉκ° μλ κ·Έλνμ λλ€.
λΉμ ν μλ£κ΅¬μ‘°μ νΉμ§ λ° μ₯λ¨μ .
-
νΉμ§ :
- κ³μΈ΅μ λλ λ€νΈμν¬ κ΅¬μ‘°λ₯Ό λνλ΄λ λ° μ ν©ν©λλ€.
- 볡μ‘ν κ΄κ³λ₯Ό ννν μ μμΌλ©°, λ°μ΄ν° μμ κ°μ λ€λλ€ κ΄κ³λ₯Ό μ²λ¦¬ν μ μμ΅λλ€.
-
μ₯μ :
- λ°μ΄ν°μ κ³μΈ΅μ ꡬ쑰λ₯Ό μ½κ² ννν μ μμ΅λλ€(νΈλ¦¬).
- 볡μ‘ν μ°κ²° κ΄κ³λ₯Ό ν¨κ³Όμ μΌλ‘ λͺ¨λΈλ§ν μ μμ΅λλ€(κ·Έλν).
- νΉμ μ νμ νμ, μ λ ¬, λ°μ΄ν° μμΆ, λ€νΈμν¬ λΌμ°ν λ±μ μ μ©ν©λλ€.
-
λ¨μ :
- ꡬνκ³Ό κ΄λ¦¬κ° μ ν μλ£κ΅¬μ‘°λ³΄λ€ 볡μ‘ν μ μμ΅λλ€.
- νΉμ μμ (μ: νΈλ¦¬μ κ· ν μ μ§, κ·Έλν νμ λ±)μμ μΆκ°μ μΈ μκ³ λ¦¬μ¦μ΄ νμν©λλ€.
λ§λ¬΄λ¦¬.
λΉμ ν μλ£κ΅¬μ‘°λ λ°μ΄ν°κ° λ¨μν μμ°¨μ μΌλ‘ λ°°μ΄λμ§ μκ³ , 볡μ‘ν κ΄κ³λ₯Ό λνλ΄λ κ²½μ°μ μ¬μ©λ©λλ€.
μλ₯Ό λ€μ΄, νμΌ μμ€ν μ λλ ν°λ¦¬ ꡬ쑰, λ°μ΄ν°λ² μ΄μ€ μΈλ±μ€, μμ λ€νΈμν¬μ μ¬μ©μ κ΄κ³ λ±μ΄ λΉμ ν μλ£κ΅¬μ‘°λ₯Ό νμ©νλ μ¬λ‘μ λλ€.
2οΈβ£ μλ£κ΅¬μ‘°μ ꡬν.
1οΈβ£ μΆμ μλ£ν(Abstract Data Type, ADT)
μλ° νλ‘κ·Έλλ°μμμ μΆμ μλ£ν(Abstract Data Type, ADT)μ λ°μ΄ν°μ λ Όλ¦¬μ ꡬ쑰μ μ΄λ₯Ό μ‘°μνλ μ°μ°λ€μ λͺ ννκ² μ μν κ°λ μ λλ€.
ADTλ ꡬν μΈλΆ μ¬νμ μ¨κΈ°κ³ , λ°μ΄ν°μ μ°μ°μ μΈν°νμ΄μ€λ₯Ό ν΅ν΄ μ¬μ©μμκ² μΆμμ μΈ μμ€μμ λ°μ΄ν° μ‘°μμ μ 곡ν©λλ€.
μ¦, ADTλ λ°μ΄ν°κ° μ΄λ»κ² μ μ₯λκ³ κ΅¬νλλμ§μ λν μ 보λ κ°μΆκ³ , λ°μ΄ν°μ μνΈμμ©νλ λ°©λ²λ§μ μ μν©λλ€.
μ£Όμ κ°λ
-
μΆμν(Abstraction)
- ADTλ λ°μ΄ν°λ₯Ό μΆμννμ¬ λ°μ΄ν°μ μ€μ ꡬνκ³Ό λ 립μ μΌλ‘ μ¬μ©λ μ μλλ‘ ν©λλ€.
- μ¬μ©μλ λ°μ΄ν°μ μ μ₯ λ°©μμ΄λ μ°μ°μ ꡬν λ°©λ²μ μ νμ μμ΄, ADTκ° μ 곡νλ μΈν°νμ΄μ€λ₯Ό ν΅ν΄ λ°μ΄ν°λ₯Ό μ‘°μν μ μμ΅λλ€.
-
μΈν°νμ΄μ€(Interface)
- ADTλ λ°μ΄ν° νμ κ³Ό μ΄λ₯Ό λ€λ£¨λ μ°μ°λ€μ μΈν°νμ΄μ€λ₯Ό ν΅ν΄ μ μν©λλ€.
- μλ°μμλ μΈν°νμ΄μ€(Interface) ν€μλλ₯Ό μ¬μ©νμ¬ ADTμ μ°μ°μ μ μν μ μμ΅λλ€.
-
μΊ‘μν(Encapsulation)
- ADTλ λ°μ΄ν°μ μ°μ°μ νλμ λ¨μλ‘ λ¬Άμ΄ μΊ‘μνν©λλ€.
- λ°μ΄ν°λ₯Ό μ§μ μ κ·Όνμ§ μκ³ , μ μλ μ°μ°μ ν΅ν΄μλ§ μ κ·Όν μ μλλ‘ νμ¬ λ°μ΄ν° 무결μ±μ 보μ₯ν©λλ€.
μλ°μμμ ADT μμ
λ€μμ μλ°μμ μ€ν(Stack) ADTλ₯Ό μ μνκ³ κ΅¬ννλ μμμ λλ€.
μ€ν μΈν°νμ΄μ€ μ μ
public interface Stack<T> {
void push(T item); // μ€νμ μμ΄ν
μ μΆκ°
T pop(); // μ€νμμ μμ΄ν
μ μ κ±°νκ³ λ°ν
T peek(); // μ€νμ 맨 μ μμ΄ν
μ λ°ν(μ κ±°νμ§ μμ)
boolean isEmpty(); // μ€νμ΄ λΉμ΄ μλμ§ νμΈ
int size(); // μ€νμ ν¬κΈ° λ°ν
}
μ€ν ꡬν
import java.util.ArrayList;
import java.util.List;
public class ArrayListStack<T> implements Stack<T> {
private List<T> list = new ArrayList<>();
@Override
public void push(T item) {
list.add(item);
}
@Override
public T pop() {
if (isEmpty()) {
throw new RuntimException("Stack is empty");
}
return list.remove(list.size() - 1);
}
@Override
public T peek() {
if (isEmpty()) {
throw new RuntimeException("Stack is empty");
}
return list.get(list.size() - 1);
}
@Override
public boolean isEmpty() {
return list.isEmpty();
}
@Override
public int size() {
return list.size();
}
}
μ€λͺ
-
β
Stack<T>
β μΈν°νμ΄μ€λ μ€ν ADTμ μ°μ°μ μ μν©λλ€. μ΄ μΈν°νμ΄μ€λ βpushβ, βpopβ, βpeekβ, βisEmptyβ, βsizeβ λ©μλλ₯Ό ν¬ν¨ν©λλ€. -
β
ArrayListStack<T>
β ν΄λμ€λ βStack<T>
β μΈν°νμ΄μ€λ₯Ό ꡬνν©λλ€. μ΄ ν΄λμ€λ βArrayListβ λ₯Ό λ΄λΆ λ°μ΄ν° κ΅¬μ‘°λ‘ μ¬μ©νμ¬ μ€ν μ°μ°μ ꡬνν©λλ€. - βpushβ λ©μλλ μ€νμ μμ΄ν μ μΆκ°ν©λλ€.
- βpopβ λ©μλλ μ€νμμ 맨 μμ μμ΄ν μ μ κ±°νκ³ λ°νν©λλ€.
- βpeekβ λ©μλλ μ€νμ 맨 μ μμ΄ν μ μ κ±°νμ§ μκ³ λ°νν©λλ€.
- βisEmptyβ λ©μλλ μ€νμ΄ λΉμ΄ μλμ§ νμΈν©λλ€.
- βsizeβ λ©μλλ μ€νμ ν¬κΈ°λ₯Ό λ°νν©λλ€.
μ΄ μμμμ βStack<T>
β μΈν°νμ΄μ€λ μ€ν ADTλ₯Ό μ μνκ³ , βArrayListStack<T>
β ν΄λμ€λ μ΄ ADTλ₯Ό ꡬνν κ²μ
λλ€.
μ¬μ©μλ βArrayListStackβ μ λ΄λΆ ꡬνμ μ νμ μμ΄ βStackβ μΈν°νμ΄μ€λ₯Ό ν΅ν΄ μ€ν μ°μ°μ μ¬μ©ν μ μμ΅λλ€.
μ΄λ ADTμ μ£Όμ μ₯μ μ€ νλμΈ κ΅¬νμ λ 립μ±μ μ 보μ¬μ€λλ€.