Array vs LinkedList νΉμ§ & μ±λ₯ λΉκ΅
Array (λ°°μ΄)
νΉμ§
- κ°μ νμ μ μ¬λ¬ λ³μλ₯Ό νλμ λ¬ΆμμΌλ‘ λ€λ£¨λ μλ£κ΅¬μ‘°
- 물리μ μΌλ‘ μ°μμ μΈ λ©λͺ¨λ¦¬ 곡κ°μ μ μ₯λλ©° ν¬κΈ°κ° κ³ μ λμ΄ μλ€.
μκ° λ³΅μ‘λ
μ κ·Ό(Access)
- λ°°μ΄μ 무μμ μ κ·Ό(random access)μ΄ κ°λ₯νλ€.
- μΈλ±μ€λ₯Ό μκ³ μλ κ²½μ° O(1)
κ²μ(Search): μμ°¨ μ κ·Όμ΄λΌκ³ λ ν¨
- μ ν κ²μ(Linear Search): μ λ ¬λμ΄ μμ§ μμ λ°°μ΄μμ νΉμ κ°μ μ°Ύλ κ²½μ°λ‘ O(n)
- μ΄μ§ κ²μ(Binary Search): μ λ ¬λ λ°°μ΄μμ νΉμ κ°μ μ°Ύλ κ²½μ°λ‘ O(log n)
μ½μ (Insertion)
- λ°°μ΄μ μμμ μμλ₯Ό μ½μ νλ κ²½μ°, μ΄ν μμλ€μ λͺ¨λ ν μΉΈμ© λ€λ‘ μ΄λμμΌμΌ νλ―λ‘ O(n)
- λ°°μ΄μ μ€κ°μ μμλ₯Ό μ½μ νλ κ²½μ°, μ΄ν μμλ€μ λͺ¨λ ν μΉΈμ© λ€λ‘ μ΄λμμΌμΌ νλ―λ‘ O(n)
- λ°°μ΄μ λμ μμλ₯Ό μ½μ νλ κ²½μ°, μΆκ°μ μΈ μμ μ΄λμ νμλ‘ νμ§ μκΈ° λλ¬Έμ O(1)
- λμ λ°°μ΄μ κ²½μ°, λ°°μ΄μ΄ κ°λμ°¬ μνμμ μμκ° μΆκ°λ κ²½μ° λ°°μ΄μ ν¬κΈ°λ₯Ό λ λ°°λ‘ λλ¦¬κ³ κΈ°μ‘΄ μμλ€μ 볡μ¬ν΄μΌ νλ―λ‘ O(n)
μμ (Deletion)
- λ°°μ΄μ μμ μμλ₯Ό μμ νλ κ²½μ°, μ΄ν μμλ€μ λͺ¨λ ν μΉΈμ© μμΌλ‘ μ΄λμμΌμΌ νλ―λ‘ O(n)
- λ°°μ΄μ μ€κ° μμλ₯Ό μμ νλ κ²½μ°, μ΄ν μμλ€μ λͺ¨λ ν μΉΈμ© μμΌλ‘ μ΄λμμΌμΌ νλ―λ‘ O(n)
- λ°°μ΄μ λ μμλ₯Ό μμ νλ κ²½μ°, μΆκ°μ μΈ μμ μ΄λμ νμλ‘ νμ§ μκΈ° λλ¬Έμ O(1)
LinkedList (μ°κ²°λ¦¬μ€νΈ)
νΉμ§
- Arrayμ λΉκ΅νμ λ μ½μ /μμ μ°μ°μ ν¨μ¨μ μΈ μλ£κ΅¬μ‘°
- Arrayκ° λ¬Όλ¦¬μ μΌλ‘ μ°μμ μΈ κ³΅κ°μ λ°μ΄ν°λ₯Ό μ μ₯νλ€λ©΄, LinkedListλ λΉμ°μμ μΈ κ³΅κ°μ λ°μ΄ν°λ₯Ό μ μ₯νκ³ κ·Έ μ£Όμλ₯Ό κ°λ¦¬ν€λ ν¬μΈν°λ‘ μ°κ²°ν΄μ κ΄λ¦¬νλ€.
- μλ‘μ΄ μμκ° μΆκ°λ λλ§λ€ λμ μΌλ‘ 곡κ°μ ν λΉλ°μ λΉμ°μμ μΈ λ©λͺ¨λ¦¬ 곡κ°μ μΆκ°νλ€.
- λ°μ΄ν°μ μ μ₯ λ¨μμΈ λ Έλλ‘ κ΅¬μ±λμ΄ μκ³ κ°κ°μ λ Έλλ "κ°"κ³Ό "ν¬μΈν°"(λ€μ λ Έλλ₯Ό κ°λ¦¬ν€λ μ£Όμ)λ₯Ό κ°μ§κ³ μλ€.
- "κ°"μ μ μ/μ€μμ κ°μ κΈ°μ΄ νμ μ΄λ ν΄λμ€μ κ°μ²΄κ° λ μ μλ€.
μκ° λ³΅μ‘λ
μ κ·Ό(Access)
- νΉμ μΈλ±μ€μ μμΉν μμμ μ κ·Όνλ κ²½μ°, μ²μλΆν° μννμ¬ ν΄λΉ μμΉλ₯Ό μ°ΎμμΌ νλ―λ‘ O(n)
κ²μ(Search)
- νΉμ κ°μ λ Έλλ₯Ό μ°Ύλ κ²½μ°, μ²μλΆν° μννμ¬ νΉμ κ°μ κ°λ λ Έλλ₯Ό μ°ΎμμΌ νλ―λ‘ O(n)
μ½μ (Insertion)
- μ°κ²°λ¦¬μ€νΈμ μμμ μμλ₯Ό μ½μ νλ κ²½μ°, head λ Έλμ ν¬μΈν°λ§ λ³κ²½νλ©΄ λλ―λ‘ O(1)
- μ°κ²°λ¦¬μ€νΈμ μ€κ°μ μμλ₯Ό μ½μ νλ κ²½μ°, μ²μλΆν° μννμ¬ μ½μ ν μμΉμ μ΄μ λ Έλλ₯Ό μ°ΎμμΌ νλ―λ‘ O(n)
- λ¨, μ½μ μμ μ체λ ν΄λΉ λ Έλμ ν¬μΈν°λ§ λ³κ²½νλ©΄ λλ―λ‘ O(1)
- μ°κ²°λ¦¬μ€νΈμ λμ μμλ₯Ό μ½μ νλ κ²½μ°, μ²μλΆν° μννμ¬ λ§μ§λ§ λ Έλλ₯Ό μ°ΎμμΌ νλ―λ‘ O(n)
- μ΄ λ, μκ°λ³΅μ‘λλ₯Ό O(n) -> O(1)μΌλ‘ κ°μ νλ λ°©λ²? tail ν¬μΈν°λ₯Ό λμ΄ λ§μ§λ§ λ Έλμ μ£Όμλ₯Ό κΈ°μ΅νλ€.
μμ (Deletion)
- μ°κ²°λ¦¬μ€νΈμ μμ μμλ₯Ό μμ νλ κ²½μ°, head λ Έλμ ν¬μΈν°λ§ λ³κ²½νλ©΄ λλ―λ‘ O(1)
- μ°κ²°λ¦¬μ€νΈμ μ€κ° μμλ₯Ό μμ νλ κ²½μ°, μ²μλΆν° μννμ¬ μμ ν μμΉμ μ΄μ λ Έλλ₯Ό μ°ΎμμΌ νλ―λ‘ O(n)
- λ¨, μμ μμ μ체λ ν΄λΉ λ Έλμ ν¬μΈν°λ§ λ³κ²½νλ©΄ λλ―λ‘ O(1)
- μ°κ²°λ¦¬μ€νΈμ λ μμλ₯Ό μμ νλ κ²½μ°, μ²μλΆν° μννμ¬ λ§μ§λ§ λ Έλλ₯Ό μ°ΎμμΌ νλ―λ‘ O(n)
- λ¨, μμ μμ μ체λ ν΄λΉ λ Έλμ ν¬μΈν°λ§ λ³κ²½νλ©΄ λλ―λ‘ O(1)
Array vs LinkedList
Array
- λΉ λ₯Έ μ κ·Ό: 무μμ μ κ·Ό(random access)μ΄ κ°λ₯νκΈ° λλ¬Έμ μΈλ±μ€λ₯Ό μ¬μ©νμ¬ O(1)μ μκ°λ³΅μ‘λλ‘ μμμ μ§μ μ κ·Όν μ μλ€.
- λλ¦° μ½μ λ° μμ : μ½μ /μμ μ λ°μ΄ν°λ₯Ό ν μΉΈμ© λ€/μμΌλ‘ μ΄λν΄μΌ νκΈ° λλ¬Έμ λΉν¨μΈμ μ΄λ€.
- ν¬κΈ° κ³ μ : λ°°μ΄ μμ± μμ ν¬κΈ°κ° κ²°μ λλ©° λ³κ²½νκΈ° μ΄λ ΅λ€. ν¬κΈ°λ₯Ό λ³κ²½νλ €λ©΄ μ λ°°μ΄μ ν λΉνκ³ κΈ°μ‘΄ λ°μ΄ν°λ₯Ό 볡μ¬ν΄μΌ νλ€.
- μ°μμ μΈ λ©λͺ¨λ¦¬ κ³΅κ° νμ: 물리μ μΌλ‘ μ°μλ λ©λͺ¨λ¦¬ 곡κ°μ΄ νμνκΈ° λλ¬Έμ 곡κ°μ μ μ½μ΄ μ‘΄μ¬νλ€.
- λ©λͺ¨λ¦¬ κ³΅κ° ν¨μ¨μ±: κ° μμλ λμΌν ν¬κΈ°λ₯Ό κ°μ§κ³ μμΌλ©° μΆκ° λ©λͺ¨λ¦¬ μ€λ²ν€λκ° μλ€.
Linked List
- λΉ λ₯Έ μ½μ λ° μμ : μ½μ /μμ ν λ Έλλ₯Ό μ°Ύλ λ°λ O(n)μ΄ κ±Έλ¦΄ μ μμ§λ§, μ½μ /μμ μμ μ체λ ν΄λΉ λ Έλμ ν¬μΈν°λ§ λ³κ²½νλ©΄ λλ―λ‘ O(1)μ΄λ€.
- λλ¦° μ κ·Ό: μμ°¨ μ κ·Ό(sequential access)λ§ κ°λ₯νκΈ° λλ¬Έμ O(n)μ μκ°λ³΅μ‘λλ₯Ό κ°μ§λ€.
- λμ ν¬κΈ°: ν¬κΈ°λ₯Ό λμ μΌλ‘ μ‘°μ κ°λ₯νλ―λ‘ λ©λͺ¨λ¦¬ μ¬μ©μ΄ ν¨μ¨μ μ΄λ€. (λΆνμν λ©λͺ¨λ¦¬ 곡κ°μ λλΉνμ§ μλλ€.)
- μ°μμ μΈ λ©λͺ¨λ¦¬ κ³΅κ° λΆνμ: 물리μ μΌλ‘ μ°μλ λ©λͺ¨λ¦¬ 곡κ°μ΄ νμνμ§ μκΈ° λλ¬Έμ 곡κ°μ μ μ½μ΄ μλ€.
- λ©λͺ¨λ¦¬ κ³΅κ° λΉν¨μ¨μ±: κ° λ Έλλ λ€μ λ Έλλ₯Ό κ°λ¦¬ν€λ ν¬μΈν°λ₯Ό μ μ₯ν΄μΌ νλ―λ‘ μΆκ°μ μΈ λ©λͺ¨λ¦¬κ° νμνλ€.