πŸ’» Knowledge/자료ꡬ쑰

Singly Linked List vs Doubly Linked List vs Circular Linked List μ‹œκ°„λ³΅μž‘λ„ & μ‚¬μš© 사둀

ming412 2023. 9. 21. 11:55

Singly Linked List (단일 μ—°κ²° 리슀트)

각 μš”μ†Œκ°€ λ‹€μŒ μš”μ†Œλ§Œ κ°€λ¦¬ν‚€λŠ” 단일 λ°©ν–₯ ꡬ쑰이닀.

μ‹œκ°„ λ³΅μž‘λ„

검색

- 처음 λ…Έλ“œ(head)λΆ€ν„° ν•˜λ‚˜μ”© μˆœνšŒν•˜λ©° μ›ν•˜λŠ” 값을 μ°Ύμ•„μ•Ό ν•˜λ―€λ‘œ O(n)

 

μ‚½μž…

- μ‹œμž‘μ— μ›μ†Œλ₯Ό μ‚½μž…ν•˜λŠ” 경우, head λ…Έλ“œμ˜ ν¬μΈν„°λ§Œ λ³€κ²½ν•˜λ©΄ λ˜λ―€λ‘œ O(1)

- 쀑간에 μ›μ†Œλ₯Ό μ‚½μž…ν•˜λŠ” 경우, μ²˜μŒλΆ€ν„° μˆœνšŒν•˜μ—¬ μ‚½μž…ν•  μœ„μΉ˜μ˜ 이전 λ…Έλ“œλ₯Ό μ°Ύμ•„μ•Ό ν•˜λ―€λ‘œ O(n)

    - 단, μ‚½μž… μž‘μ—… μžμ²΄λŠ” ν•΄λ‹Ή λ…Έλ“œμ˜ ν¬μΈν„°λ§Œ λ³€κ²½ν•˜λ©΄ λ˜λ―€λ‘œ O(1)

- 끝에 μ›μ†Œλ₯Ό μ‚½μž…ν•˜λŠ” 경우, μ²˜μŒλΆ€ν„° μˆœνšŒν•˜μ—¬ λ§ˆμ§€λ§‰ λ…Έλ“œλ₯Ό μ°Ύμ•„μ•Ό ν•˜λ―€λ‘œ O(n)

    - 단, μ‚½μž… μž‘μ—… μžμ²΄λŠ” ν•΄λ‹Ή λ…Έλ“œμ˜ ν¬μΈν„°λ§Œ λ³€κ²½ν•˜λ©΄ λ˜λ―€λ‘œ O(1)

 

μ‚­μ œ

- μ‹œμž‘ μ›μ†Œλ₯Ό μ‚­μ œν•˜λŠ” 경우, head λ…Έλ“œμ˜ ν¬μΈν„°λ§Œ λ³€κ²½ν•˜λ©΄ λ˜λ―€λ‘œ O(1)

- μ€‘κ°„ μ›μ†Œλ₯Ό μ‚­μ œν•˜λŠ” 경우, μ²˜μŒλΆ€ν„° μˆœνšŒν•˜μ—¬ μ‚­μ œν•  μœ„μΉ˜μ˜ 이전 λ…Έλ“œλ₯Ό μ°Ύμ•„μ•Ό ν•˜λ―€λ‘œ O(n)

    - 단, μ‚­μ œ μž‘μ—… μžμ²΄λŠ” ν•΄λ‹Ή λ…Έλ“œμ˜ ν¬μΈν„°λ§Œ λ³€κ²½ν•˜λ©΄ λ˜λ―€λ‘œ O(1)

- λ μ›μ†Œλ₯Ό μ‚­μ œν•˜λŠ” 경우, μ²˜μŒλΆ€ν„° μˆœνšŒν•˜μ—¬ λ§ˆμ§€λ§‰ λ…Έλ“œλ₯Ό μ°Ύμ•„μ•Ό ν•˜λ―€λ‘œ O(n)

    - 단, μ‚­μ œ μž‘μ—… μžμ²΄λŠ” ν•΄λ‹Ή λ…Έλ“œμ˜ ν¬μΈν„°λ§Œ λ³€κ²½ν•˜λ©΄ λ˜λ―€λ‘œ O(1)

 

μ‚¬μš© 사둀

- μŠ€νƒκ³Ό 큐의 κ΅¬ν˜„: μ‚½μž… 및 μ‚­μ œ 연산이 O(1)의 μ‹œκ°„λ³΅μž‘λ„λ₯Ό κ°€μ§€κΈ° λ•Œλ¬Έμ— μŠ€νƒ/큐 κ΅¬ν˜„μ— 주둜 μ‚¬μš©λœλ‹€.

 

Doubly Linked List (이쀑 μ—°κ²° 리슀트)

각 μš”μ†Œκ°€ 이전 μš”μ†Œμ™€ λ‹€μŒ μš”μ†Œλ₯Ό λͺ¨λ‘ κ°€λ¦¬ν‚€λŠ” 이쀑 λ°©ν–₯ ꡬ쑰이닀.

각 λ…Έλ“œκ°€ λ‹€μŒ(next) λ…Έλ“œμ™€ 이전(prev) λ…Έλ“œλ₯Ό κ°€λ¦¬ν‚€λŠ” 두 개의 포인터λ₯Ό κ°€μ§€κ³  μžˆλ‹€.

μ‹œκ°„ λ³΅μž‘λ„

검색

- 처음 λ…Έλ“œ(head)λΆ€ν„° ν•˜λ‚˜μ”© μˆœνšŒν•˜λ©° μ›ν•˜λŠ” 값을 μ°Ύμ•„μ•Ό ν•˜λ―€λ‘œ O(n)

 

μ‚½μž…

- μ‹œμž‘에 μ›μ†Œλ₯Ό μ‚½μž…ν•˜λŠ” 경우, head λ…Έλ“œμ˜ ν¬μΈν„°λ§Œ λ³€κ²½ν•˜λ©΄ λ˜λ―€λ‘œ O(1)

- μ€‘간에 μ›μ†Œλ₯Ό μ‚½μž…ν•˜λŠ” 경우, μ²˜μŒλΆ€ν„° μˆœνšŒν•˜μ—¬ μ‚½μž…ν•  μœ„μΉ˜μ˜ 이전 λ…Έλ“œλ₯Ό μ°Ύμ•„μ•Ό ν•˜λ―€λ‘œ O(n)

    - 단, μ‚½μž… μž‘μ—… μžμ²΄λŠ” ν•΄λ‹Ή λ…Έλ“œμ˜ ν¬μΈν„°λ§Œ λ³€κ²½ν•˜λ©΄ λ˜λ―€λ‘œ O(1)

- λμ— μ›μ†Œλ₯Ό μ‚½μž…ν•˜λŠ” 경우, tail λ…Έλ“œμ˜ ν¬μΈν„°λ§Œ λ³€κ²½ν•˜λ©΄ λ˜λ―€λ‘œ O(1)

 

μ‚­μ œ

- μ‹œμž‘ μ›μ†Œλ₯Ό μ‚­μ œν•˜λŠ” 경우, head λ…Έλ“œμ˜ ν¬μΈν„°λ§Œ λ³€κ²½ν•˜λ©΄ λ˜λ―€λ‘œ O(1)

- μ€‘κ°„ μ›μ†Œλ₯Ό μ‚­μ œν•˜λŠ” 경우, μ²˜μŒλΆ€ν„° μˆœνšŒν•˜μ—¬ μ‚­μ œν•  μœ„μΉ˜μ˜ 이전 λ…Έλ“œλ₯Ό μ°Ύμ•„μ•Ό ν•˜λ―€λ‘œ O(n)

    - 단, μ‚­μ œ μž‘μ—… μžμ²΄λŠ” ν•΄λ‹Ή λ…Έλ“œμ˜ ν¬μΈν„°λ§Œ λ³€κ²½ν•˜λ©΄ λ˜λ―€λ‘œ O(1)

- λ μ›μ†Œλ₯Ό μ‚­μ œν•˜λŠ” 경우, tail λ…Έλ“œμ˜ ν¬μΈν„°λ§Œ λ³€κ²½ν•˜λ©΄ λ˜λ―€λ‘œ O(1)

 

μ‚¬μš© 사둀

- ν…μŠ€νŠΈ 에디터 κ΅¬ν˜„: μ‚¬μš©μžκ°€ μ»€μ„œλ₯Ό μ•ž λ’€λ‘œ μ›€μ§μ΄λ©΄μ„œ ν…μŠ€νŠΈλ₯Ό νŽΈμ§‘ν•  수 μžˆμ–΄μ•Ό ν•œλ‹€. μ΄λ•Œ 이쀑 μ—°κ²° λ¦¬μŠ€νŠΈκ°€ μœ μš©ν•˜λ©° 각 λ…Έλ“œκ°€ ν•œ 문자λ₯Ό λ‚˜νƒ€λ‚΄λŠ” λ°©μ‹μœΌλ‘œ κ΅¬ν˜„λ  수 μžˆλ‹€. 

- λΈŒλΌμš°μ €μ˜ νžˆμŠ€ν† λ¦¬: λΈŒλΌμš°μ €μ—μ„œ 'μ•žμœΌλ‘œ κ°€κΈ°'와 'λ’€λ‘œ κ°€κΈ°' λ²„νŠΌμ„ κ΅¬ν˜„ν•  λ•Œ νš¨κ³Όμ μ΄λ‹€. 각 λ…Έλ“œλŠ” ν•œ 개의 μ›Ή νŽ˜μ΄μ§€ URL을 μ €μž₯ν•˜κ³ , μ‚¬μš©μžκ°€ μ•ž/λ’€λ‘œ 이동할 λ•Œλ§ˆλ‹€ 이쀑 μ—°κ²° 리슀트λ₯Ό 톡해 μ‰½κ²Œ 탐색할 수 μžˆλ‹€.

- μΊμ‹œ κ΅¬ν˜„: LRU(Least Recently Used) Cache와 같이 μ‚½μž…/μ‚­μ œκ°€ λΉˆλ²ˆν•œ 경우 이쀑 μ—°κ²° 리슀트λ₯Ό μ‚¬μš©ν•˜λ©΄ νš¨μœ¨μ μ΄λ‹€. 쀑간에 μƒˆλ‘œμš΄ ν•­λͺ©μ„ μ‚½μž…ν•˜κ±°λ‚˜ κ°€μž₯ 였래된 ν•­λͺ©μ„ μ‚­μ œν•˜λŠ” μž‘μ—…μ„ λΉ λ₯΄κ²Œ μˆ˜ν–‰ν•  수 μžˆλ‹€.

 

Circular Linked List (μ›ν˜• μ—°κ²° 리슀트)

λ§ˆμ§€λ§‰ μš”μ†Œμ˜ 포인터가 첫 μš”μ†Œλ₯Ό κ°€λ¦¬ν‚€λŠ” ν˜•νƒœλ‘œ κ΅¬μ„±λœ μ—°κ²°λ¦¬μŠ€νŠΈμ΄λ‹€.

단일 μ›ν˜• μ—°κ²° 리슀트

μ‹œκ°„ λ³΅μž‘λ„

검색

- 처음 λ…Έλ“œ(head)λΆ€ν„° ν•˜λ‚˜μ”© μˆœνšŒν•˜λ©° μ›ν•˜λŠ” 값을 μ°Ύμ•„μ•Ό ν•˜λ―€λ‘œ O(n)

 

μ‚½μž…

- μ‹œμž‘에 μ›μ†Œλ₯Ό μ‚½μž…ν•˜λŠ” 경우, head λ…Έλ“œμ˜ ν¬μΈν„°λ§Œ λ³€κ²½ν•˜λ©΄ λ˜λ―€λ‘œ O(1)

- μ€‘간에 μ›μ†Œλ₯Ό μ‚½μž…ν•˜λŠ” 경우, μ²˜μŒλΆ€ν„° μˆœνšŒν•˜μ—¬ μ‚½μž…ν•  μœ„μΉ˜μ˜ 이전 λ…Έλ“œλ₯Ό μ°Ύμ•„μ•Ό ν•˜λ―€λ‘œ O(n)

    - 단, μ‚½μž… μž‘μ—… μžμ²΄λŠ” ν•΄λ‹Ή λ…Έλ“œμ˜ ν¬μΈν„°λ§Œ λ³€κ²½ν•˜λ©΄ λ˜λ―€λ‘œ O(1)

- λμ— μ›μ†Œλ₯Ό μ‚½μž…ν•˜λŠ” 경우, μ²˜μŒλΆ€ν„° μˆœνšŒν•˜μ—¬ λ§ˆμ§€λ§‰ λ…Έλ“œλ₯Ό μ°Ύμ•„μ•Ό ν•˜λ―€λ‘œ O(n)

    - 단, μ‚½μž… μž‘μ—… μžμ²΄λŠ” ν•΄λ‹Ή λ…Έλ“œμ˜ ν¬μΈν„°λ§Œ λ³€κ²½ν•˜λ©΄ λ˜λ―€λ‘œ O(1)

 

μ‚­μ œ

- μ‹œμž‘ μ›μ†Œλ₯Ό μ‚­μ œν•˜λŠ” 경우, head λ…Έλ“œμ˜ ν¬μΈν„°λ§Œ λ³€κ²½ν•˜λ©΄ λ˜λ―€λ‘œ O(1)

- μ€‘κ°„ μ›μ†Œλ₯Ό μ‚­μ œν•˜λŠ” 경우, μ²˜μŒλΆ€ν„° μˆœνšŒν•˜μ—¬ μ‚­μ œν•  μœ„μΉ˜μ˜ 이전 λ…Έλ“œλ₯Ό μ°Ύμ•„μ•Ό ν•˜λ―€λ‘œ O(n)

    - 단, μ‚­μ œ μž‘μ—… μžμ²΄λŠ” ν•΄λ‹Ή λ…Έλ“œμ˜ ν¬μΈν„°λ§Œ λ³€κ²½ν•˜λ©΄ λ˜λ―€λ‘œ O(1)

- λ μ›μ†Œλ₯Ό μ‚­μ œν•˜λŠ” 경우, μ²˜μŒλΆ€ν„° μˆœνšŒν•˜μ—¬ λ§ˆμ§€λ§‰ λ…Έλ“œλ₯Ό μ°Ύμ•„μ•Ό ν•˜λ―€λ‘œ O(n)

    - 단, μ‚­μ œ μž‘μ—… μžμ²΄λŠ” ν•΄λ‹Ή λ…Έλ“œμ˜ ν¬μΈν„°λ§Œ λ³€κ²½ν•˜λ©΄ λ˜λ―€λ‘œ O(1)

 

이쀑 μ›ν˜• μ—°κ²° 리슀트

μ‹œκ°„ λ³΅μž‘λ„

검색

- 처음 λ…Έλ“œ(head)λΆ€ν„° ν•˜λ‚˜μ”© μˆœνšŒν•˜λ©° μ›ν•˜λŠ” 값을 μ°Ύμ•„μ•Ό ν•˜λ―€λ‘œ O(n)

 

μ‚½μž…

- μ‹œμž‘에 μ›μ†Œλ₯Ό μ‚½μž…ν•˜λŠ” 경우, head λ…Έλ“œμ˜ ν¬μΈν„°λ§Œ λ³€κ²½ν•˜λ©΄ λ˜λ―€λ‘œ O(1)

- μ€‘간에 μ›μ†Œλ₯Ό μ‚½μž…ν•˜λŠ” 경우, μ²˜μŒλΆ€ν„° μˆœνšŒν•˜μ—¬ μ‚½μž…ν•  μœ„μΉ˜μ˜ 이전 λ…Έλ“œλ₯Ό μ°Ύμ•„μ•Ό ν•˜λ―€λ‘œ O(n)

    - 단, μ‚½μž… μž‘μ—… μžμ²΄λŠ” ν•΄λ‹Ή λ…Έλ“œμ˜ ν¬μΈν„°λ§Œ λ³€κ²½ν•˜λ©΄ λ˜λ―€λ‘œ O(1)

- λμ— μ›μ†Œλ₯Ό μ‚½μž…ν•˜λŠ” 경우, head λ…Έλ“œμ˜ 이전(prev) μ£Όμ†Œλ₯Ό 따라가면 λ§ˆμ§€λ§‰ λ…Έλ“œκ°€ 있기 λ•Œλ¬Έμ— O(1)

 

μ‚­μ œ

- μ‹œμž‘ μ›μ†Œλ₯Ό μ‚­μ œν•˜λŠ” 경우, head λ…Έλ“œμ˜ ν¬μΈν„°λ§Œ λ³€κ²½ν•˜λ©΄ λ˜λ―€λ‘œ O(1)

- μ€‘κ°„ μ›μ†Œλ₯Ό μ‚­μ œν•˜λŠ” 경우, μ²˜μŒλΆ€ν„° μˆœνšŒν•˜μ—¬ μ‚­μ œν•  μœ„μΉ˜μ˜ 이전 λ…Έλ“œλ₯Ό μ°Ύμ•„μ•Ό ν•˜λ―€λ‘œ O(n)

    - 단, μ‚­μ œ μž‘μ—… μžμ²΄λŠ” ν•΄λ‹Ή λ…Έλ“œμ˜ ν¬μΈν„°λ§Œ λ³€κ²½ν•˜λ©΄ λ˜λ―€λ‘œ O(1)

- λ μ›μ†Œλ₯Ό μ‚­μ œν•˜λŠ” 경우, head λ…Έλ“œμ˜ 이전(prev) μ£Όμ†Œλ₯Ό 따라가면 λ§ˆμ§€λ§‰ λ…Έλ“œκ°€ 있기 λ•Œλ¬Έμ— O(1)

 

μ‚¬μš© 사둀

- Round Robin μ•Œκ³ λ¦¬μ¦˜μ„ μ΄μš©ν•œ ν”„λ‘œμ„ΈμŠ€ μŠ€μΌ€μ€„λ§: 예λ₯Ό λ“€μ–΄, ν”„λ‘œμ„ΈμŠ€ A, B, Cκ°€ μžˆμ„ λ•Œ, Circular Linked ListλŠ” A -> B -> C -> A의 ν˜•νƒœλ‘œ κ΅¬μ„±λœλ‹€. μŠ€μΌ€μ€„λŸ¬λŠ” 이 리슀트λ₯Ό 따라 μˆœν™˜ν•˜λ©΄μ„œ 각 ν”„λ‘œμ„ΈμŠ€μ—κ²Œ CPUλ₯Ό ν• λ‹Ήν•œλ‹€. (ν”„λ‘œμ„ΈμŠ€ C의 μ‹œκ°„ 할당이 λλ‚˜λ©΄ λ‹€μ‹œ ν”„λ‘œμ„ΈμŠ€ A둜 λŒμ•„κ°€κ²Œ λœλ‹€.)