2. μ°κ²° 리μ€νΈ (Linked List)
μ°κ²° 리μ€νΈλ ?
λ¨Όμ , Listλ₯Ό μκ°νλ©΄ μ ~ λμ΄λμ΄ μλ κ²μ΄ λ μ€λ₯΄μλμ?
μ°κ²° 리μ€νΈλ λ§ κ·Έλλ‘ μ ~ λμ΄λμ΄ μλ κ²μ λλ€.
νμ§λ§ λ°μ΄ν°λ₯Ό μλ‘ μ°κ²°νκ³ μλ κ²μ΄μ£ .
μ΄? μ ~ λμ΄λμ΄μκ³ μ°κ²°λμ΄μλ κ²μ 'λ°°μ΄' μλκ°μ?
λ§μ΅λλ€.
μλ£κ΅¬μ‘°μ κΈ°λ³Έμ΄μ λ°μ΄ν°κ° μμ°¨μ μΌλ‘ λμ΄λμ΄ μλ κ²μ λ°°μ΄μ λλ€.
κ·ΈλΌ μ°μλ λ°μ΄ν°λ₯Ό νννλ λ°©λ²μΌλ‘λ λ°°μ΄(Array)κ° μλλ° μ Linked Listλ₯Ό μ¬μ©νλμ?
λ°°μ΄κ³Ό Linked Listμλ μμ°ν μ°¨μ΄κ° μμ΅λλ€.
μμ ν¬μ€ν μμ κ° μλ£κ΅¬μ‘°λ νμμ λ°λ₯Έ μ¬μ©μ²κ° μκ³ , μ¬μ©μκ° μ λμ μΌλ‘ μ¬μ©ν΄μΌ ν¨μ νννμ΅λλ€.
κ·Έλμ λ°°μ΄μ΄λΌλ μλ£κ΅¬μ‘°μ λν΄ μκ³ Linked ListλΌλ μλ£κ΅¬μ‘°μμ μ°¨μ΄μ μ μμμΌν©λλ€.
μ°¨μ΄μ μ μ€λͺ νκΈ° μμ λ°°μ΄μ λν΄ λ°λ‘ μμ±νμ§ μκ³ λ°λ‘ Linked List ν¬μ€νΈλ₯Ό μμ±νλ μ΄μ λ νλ‘κ·Έλλ° μΈμ΄λ₯Ό 곡λΆνκ²λλ©΄ λ°°μ΄μ μ΄λ μ λ μ΅μν΄μ Έ μλ€κ³ μκ°ν΄μ κ·Έλ μ΅λλ€.
μ λΈλ‘κ·Έ JAVA μΈμ΄μ λν ν¬μ€νΈ( μλ° λ°°μ΄1, μλ° λ°°μ΄2 ) μ€ μλ μ€λͺ μ΄ μμ±λμ΄ μκ³ μ.
λ°°μ΄μ μλ‘ μμ°¨μ μΌλ‘ μ°κ²°λμ΄μμ§λ§ μ°κ²° 리μ€νΈλ μμ°¨μ μΌλ‘ μ°κ²°λμ΄ μμ§λ§ μμ°¨μ μΌλ‘ μ°κ²°λμ΄μμ§ μμ΅λλ€.
λ©λͺ¨λ¦¬ μ λ°°μ΄μ λ°μ΄ν°λ€μ΄ νλμ λ¬Άμ [.............]μΌλ‘ λ¬Άμ¬μμ§λ§ μ°κ²° 리μ€νΈλ λ°μ΄ν°κ° μλ‘ ν©μ΄μ Έ μμ΅λλ€.
μΌμμν μμλ‘ λ€μ΄λ³΄κ² μ΅λλ€. μ°λ¦¬λ λ Έλλ°© -> PCλ°© -> μνκ΄μ κ°κΈ°λ‘ νμ΅λλ€.
μ΄λ ν μ₯μμ {λ Έλλ°©, PCλ°©, μνκ΄}μ΄ μμ΅λλ€.
μ°λ¦¬λ ν΄λΉ μ₯μμμ νκ³ μΆμκ±Έ λ°λ‘ μ¦κΈΈ μ μμ΅λλ€.
κ·Έλ°λ° λ Έλλ°©μ κ°λ€κ° κ°μκΈ° λ³Όλ§μ₯μ κ°κ³ μΆμλ° ν΄λΉ μ₯μμλ λ³Όλ§μ₯μ΄ μμ΅λλ€.
λ³Όλ§μ₯μ μ΄μ©νλ €λ©΄ μ΄ μ₯μμ λ³Όλ§μ₯μ μμ μλ‘ μ€μΉν΄μΌνλλ° κ³΅κ°μ΄ λΆμ‘±ν©λλ€.
μ 체 건물μ νμ₯νκ³ λ³Όλ§μ₯μ μΆκ°ν΄μΌνμ£ .
κ·Έλ°λ° ν μ₯μμλ§ λ¨Έλ¬Όλ¬ μμ§ μκ³ λμ μ 미리 μ§λμμ΅λλ€.
A λ Έλλ°© -> B PCλ°© -> C μνκ΄
μ°λ¦¬λ A λ Έλλ°©μ κ°λ€κ° κ°μκΈ° D λ³Όλ§μ₯μ κ°κ³ μΆμ΄μ‘μ΅λλ€.
κ·ΈλΌ λ Έλλ°©μμ λ Έλλ₯Ό λΆλ₯΄λ μ€μ΄λ λ§μΉκ³ D λ³Όλ§μ₯μ λμ μ μΆκ°ν΄μ μ΄λν μ μμ΅λλ€.
μκ° λ°°μ΄μ κ°λ μ΄κ³ μλκ° μ°κ²° 리μ€νΈμ κ°λ μ λλ€. κ°μ μ₯μμλ μμ§λ§ λμ μ μΆκ°ν΄μ μ΄λν μ μμ£ .
μ°κ²°λ¦¬μ€νΈλ νλμ λ¬Άμμ΄ μλλΌ λ°©ν₯μ΄λΌμ μΈμ λ μ§ λ°©ν₯μ μμ ν μ μμ΅λλ€.
{0, 1, 2, 3, 4, 5} μ΄λΌλ λ°μ΄ν°κ° μλ€κ³ κ°μ ν©λλ€.
νμ (Search), 5 μ°ΎκΈ°
μ°λ¦¬λ λ°°μ΄μμ μμμμΉ(0)λΆν° λ§μ§λ§ μμΉ(5)κΉμ§ μ μ μμ΅λλ€. (Index)
μμ μμΉλΆν° λ§μ§λ§ μμΉκΉμ§ forλ¬Έμ ν΅ν΄ μνλ κ°μ μ°Ύμ μ μκ² μ£ ?
5λ₯Ό μ°Ύλλ€κ³ νλ©΄ λκΉμ§ νμν΄μΌνλ―λ‘ μ΄κ²μ μ΅μ μ κ²½μ°(Big-O), O(N)μ΄λΌκ³ νμ£ .
μ°κ²° 리μ€νΈμμλ νμ¬ μμΉ(μ£Όμ)λ§ μκ³ μμ΅λλ€. (Iterator)
μ°κ²° 리μ€νΈμμ Iteratorκ° 0μ κ°λ₯΄ν€λμ§, 3μ κ°λ₯΄ν€λμ§ λ§μ§λ§μ μννλ μ°μ°μ ν΅ν΄ μ μ μμ΅λλ€.
λ§μ½, Iteratorκ° 5μ μ£Όμλ₯Ό κ°λ₯΄ν€κ³ μλ€λ©΄ Ω (1), 0μ μ£Όμλ₯Ό κ°λ₯΄ν€κ³ μλ€λ©΄ O(N)
μ¦, λ¨μν νμ λ©΄μμλ ν° μ°¨μ΄κ° μμ΅λλ€.
μ κ·Ό (Access), 6λ² μ§Έ λ°μ΄ν° μ κ·Ό
μ°λ¦¬λ λ°°μ΄μμ μμμμΉλΆν° λ§μ§λ§ μμΉκΉμ§ μ μ μμ΅λλ€. (Index)
λ°°μ΄μμ 5λΌλ κ°μ μ°Ύμ λ μ°λ¦¬λ μΈλ±μ±(array[5])μ ν΅ν΄ O(1) λ§μ λ°μ΄ν°μ μ κ·Όν μ μμ΅λλ€.
μ°κ²° 리μ€νΈμμλ Index κ°λ μ΄ μμ΄μ λ°μ΄ν°μ μ κ·Όμ νκ³ μΆμ΄λ.. λ°λ‘ ν μλ μμ΅λλ€.
νμ¬ μμΉλ§ κ°μ§κ³ μμΌλκΉμ.
λ§μ½μ νμ¬ μμΉκ° '5'λ₯Ό κ°λ₯΄ν€κ³ μκ³ μ κ·Όνλ€λ©΄ Ω(1),
νμ¬ μμΉκ° '0'μ κ°λ₯΄ν€κ³ μλ€λ©΄ 5κΉμ§ νμμ μ§νν νμ μ κ·Όν μ μμ΅λλ€.
μ¦, μ΅μ μ κ²½μ° νμ μκ°μ΄ λ°μν©λλ€. O(N)
μ κ·Όμ Arrayκ° λ ν¨μ¨μ μ λλ€.
μ΄μ λΆν° Linked Listμ μ₯μ μ΄ λμ΅λλ€.
μ½μ (Insertion), 6 μ½μ
Arrayμμ 맨 λ€μ κ°μ μ½μ νλ€κ³ ν΄λ³΄μ£ .
κΈ°λ³Έμ μΌλ‘λ out of range μ€λ₯κ° λ°μν κ² μ λλ€.
μ°λ¦¬λ λ°°μ΄μ μ μΈν λ, ν¬κΈ°λ₯Ό μ νκ³ λ°°μ΄μ ν λΉνμ£ ?
array[6] = {0, 1, 2, 3, 4, 5}μ κ°μ΄ λ§μ΄μ£ .
arrayμ λ§₯μλ© ν¬κΈ°κ° 6μΌλ‘ ν λΉλμ΄μ array[6]μ μ κ·Ό ν μκ° μμ΅λλ€.
μ κ·Όμ νλλΌλ out of rangeκ° λ°μνλ κ²μ΄μ£ .
- ν΄κ²°μ±
μ²μλΆν° array[100]κ³Ό κ°μ΄ μ μΈνλ€λ©΄ 곡κ°μ΄ μΆ©λΆνλ―λ‘ λ¬Έμ λ μμ΅λλ€.
νμ§λ§, 곡κ°μ λλΉνκ² λλ€λ λ¨μ μ΄ μμ΅λλ€. λ λͺ¨λ λ°μ΄ν°μ ν¬κΈ°κ° 100μ μ΄κ³Όνλ€λ©΄ ?
λ°°μ΄ ν¬κΈ° μ¬ν λΉ
λ°°μ΄μ ν¬κΈ° < μ κ·Όνλ €λ μΈλ±μ€ λΌλ©΄, λ°°μ΄μ ν¬κΈ°λ₯Ό μ¬ν λΉνλ λ°©λ²μ΄ μμ΅λλ€.
νμ§λ§ μ¬ν λΉμ νκ² λλ©΄ μ΄μ μ λ°μ΄ν°κ° μ¬λΌμ§λ―λ‘ λ°μ΄ν°λ₯Ό 볡μ¬ν΄λκ³ λ€μ μ λ¬ν΄μΌν©λλ€.
μκ°μ λ§€μ° λλΉνλ νμμ£ . O(2N) μ λ λκ² λ€μ.
μ²μκ³Ό μ€κ°μ μ½μ ν λλ λ§μ°¬κ°μ§μ λλ€.
array[0]μ κ°μ λ£μλ€λ©΄ μ΄νμ μλ κ°μ λ€ νμΉΈμ© λ€λ‘ λ겨주μ΄μΌ ν©λλ€.
array[5] -> array[6], array[4] -> array[5] , ... , array[0] -> array[1], array[0] = 0
μ¦, O(N)μ΄μ£ .
μ΄λ²μ Linked Listμμ 맨 λ€μ κ°μ μ½μ νλ€κ³ ν΄λ³΄κ² μ΅λλ€.
λ¨Όμ , νμ¬ μμΉ(Iterator)λ§ κ°μ§κ³ μμΌλ―λ‘ λ§¨ λ€κΉμ§ νμμ ν΄μΌν©λλ€...
κ·Έλ° λ€μ μ½μ μ ν΄μΌμ£ . O(N)μ λλ€.
μ΄ λ κΉμ§λ§ 보면, λ°°μ΄λ³΄λ€ μ’μκ² νλλ μμ£ ..?
νμ§λ§ νμ¬ μμΉ λ€μ κ°μ μ½μ νλ€λ©΄ O(1)μ λλ€.
νμ¬ μμΉμ κ°μ 4μ΄κ³ , λ€μ μμΉμ κ°μ 5μ λλ€.
μ°λ¦¬λ 6μ λ€μ μμΉλ₯Ό 5λ‘ μ€μ νκ³ 4μ λ€μ μμΉλ₯Ό 5λ‘ μ€μ ν μ μμ΅λλ€.
μ΄ λ μκ°μ O(1)μ΄ λλκ±°μ£ .
μ λ°©μμ μ±ννλ©΄ μ°κ²°λ¦¬μ€νΈμμλ νμ¬ μμΉ λ€μμ κ°μ μ½μ νλ€λ©΄ μ²μ, μ€κ°, λ§μ§λ§ μ΄λ κ³³μ κ°μ μ½μ νλ O(1)μ΄ λ©λλ€.
μμ (Deletion), 5 μμ
μ½μ κ³Ό λ§μ°¬κ°μ§μ λλ€.
λ°°μ΄μ νλμ κ°μ μμ νκ² λλ©΄ λΉμ΄μλ κ³³μ νλμ© μλΉκ²¨μ€μΌνλ―λ‘ O(N)μ΄ λ©λλ€.
μ°κ²° 리μ€νΈλ κ°λ₯΄ν€λ λ°©ν₯λ§ 4 -> 5 -> 6 μμ 4 -> 6 μ΄ λλλ‘ μμ ν΄μ£Όλ©΄ λμ£ .
μ¦ O(1)μ΄ λ μ μμ΅λλ€.
μ¬μ© μ©λμ μ°¨μ΄μ μ 리
λ°°μ΄ | μ°κ²° 리μ€νΈ | |
λ³κ²½ | O(1) | Ω (1), O(N) |
μ κ·Ό | O(1) | Ω (1), O(N) |
νμ | Ω (1), O(N) | Ω (1), O(N) |
μ½μ | O(N) | Ω (1) |
μμ | O(N) | Ω (1) |
λ°°μ΄ : ν νλ¦Ώ λ§λ₯ μ΄κΈ° ννκ° κ°μΆμ΄μ Έμκ³ κ·Έ μμ κ° λ³κ²½λ§ λ°μνλ κ²½μ° ( μ±μ )
μ°κ²° 리μ€νΈ : λ°μ΄ν° κ΅¬μ‘°κ° λΉλ²νκ² λ³κ²½λλ κ²½μ° ( μλν° )
ν¬μ€νΈ λ° λκΈμ μμ±ν λ, κΈμκ° μμ±λκ³ μ€κ° κΈμλ₯Ό μ§μ°λ νμ