Doubly Linked List - Data-Structure-Study/java-datastructure GitHub Wiki

Doubly Linked List

Author: Dion๐Ÿฑ, Hamill๐Ÿ”

Doubly Linked List์˜ ํ˜•ํƒœ

Doubly Linked List

Singly Linked List์™€๋Š” ๋‹ค๋ฅด๊ฒŒ Node๊ฐ€ ์ด์ „ Node์˜ ์ฐธ์กฐ ๊ฐ’์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.

Doubly Linked List์˜ ์žฅ๋‹จ์ 

  • ์žฅ์ 

    • ์—ญ๋ฐฉํ–ฅ ํƒ์ƒ‰์ด ๊ฐ€๋Šฅํ•ด์ง
    • index ํƒ์ƒ‰์„ ํ•  ๋•Œ, ํ•ญ์ƒ ์ •๋ฐฉํ–ฅ์œผ๋กœ๋งŒ ํƒ์ƒ‰์„ ํ–ˆ๋Š”๋ฐ, ์—ญ๋ฐฉํ–ฅ ํƒ์ƒ‰์ด ๊ฐ€๋Šฅํ•ด์ ธ์„œ ํƒ์ƒ‰ํ•˜๋Š”๋ฐ ๊ฑธ๋ฆฌ๋Š” ์‹œ๊ฐ„์ด ์ ˆ๋ฐ˜์œผ๋กœ ์ค„์–ด๋“ค์—ˆ์Œ
    • ์—ญ๋ฐฉํ–ฅ ํƒ์ƒ‰์ด ํšจ์œจ์ด ์ข‹์•„์ ธ์„œ, ์†ํ•ด์—†์ด ์—ญ๋ฐฉํ–ฅ ํƒ์ƒ‰์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.
  • ๋‹จ์ 

    • node๊ฐ€ payload๋ฅผ 2๊ฐœ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์–ด์„œ ๋ฐ์ดํ„ฐ๊ฐ€ ์ปค์ง„๋‹ค.
    • Singly Linked List์— ๋น„ํ•ด์„œ ๊ตฌํ˜„์ด ๋ณต์žกํ•˜๋‹ค.
  • Doubly linked list

    • ์ด์ค‘ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ์—์„œ ๊ฐ ๋…ธ๋“œ๋Š” ๋‹ค์Œ ๋…ธ๋“œ ๋งํฌ ์™ธ์— ์ˆœ์„œ์—์„œ '์ด์ „' ๋…ธ๋“œ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” 2 ๋ฒˆ์งธ ๋งํฌ ํ•„๋“œ๋ฅผ ํฌํ•จํ•œ๋‹ค.
    • ์ด ๋‘ ๋งํฌ๋Š” 'forward(์ „๋ฐฉ)'๊ณผ 'backwards(ํ›„๋ฐฉ)' ๋˜๋Š” 'next(๋‹ค์Œ)'๊ณผ 'prev(previous ์ด์ „)'์œผ๋กœ ๋ถˆ๋ฆด ์ˆ˜ ์žˆ๋‹ค

    https://s3-us-west-2.amazonaws.com/secure.notion-static.com/2ae7592e-93b5-4556-96ba-023cffba75aa/Untitled.png
    ์ •์ˆ˜ ๊ฐ’, ๋‹ค์Œ ๋…ธ๋“œ๋กœ ํ–ฅํ•˜๋Š” ๋งํฌ, ์ด์ „ ๋…ธ๋“œ๋กœ ๊ฐ€๋Š” ๋งํฌ 3 ๊ฐœ์˜ ํ•„๋“œ๊ฐ€ ํฌํ•จ๋œ ์ด์ค‘ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ

  • ๋งŽ์€ ํ˜„๋Œ€ ์šด์˜ ์ฒด์ œ๋Š” active processes, ์Šค๋ ˆ๋“œ ๋ฐ ๊ธฐํƒ€ ๋™์  ๊ฐ์ฒด์— ๋Œ€ํ•œ ์ฐธ์กฐ๋ฅผ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ์ด์ค‘ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

  • Doubly linked vs. singly linked

    • ์ด์ค‘ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ๋Š” ๋…ธ๋“œ ๋‹น ๋” ๋งŽ์€ ๊ณต๊ฐ„์„ ํ•„์š”๋กœ ํ•˜๋ฉฐ (XOR ๋งํฌ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ํ•œ), ๊ธฐ๋ณธ ์ž‘์—…์€ ๋” ๋น„์‹ธ์ง€๋งŒ, ์–‘๋ฐฉํ–ฅ์œผ๋กœ ๋ฆฌ์ŠคํŠธ์— ๋น ๋ฅด๊ณ  ์‰ฝ๊ฒŒ ์ˆœ์ฐจ์ ์œผ๋กœ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์กฐ์ž‘ํ•˜๊ธฐ๊ฐ€ ๋” ์‰ฌ์šด ๊ฒฝ์šฐ๊ฐ€ ๋งŽ๋‹ค.
    • ์ด์ค‘ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ์—์„œ๋Š” ํ•ด๋‹น ๋…ธ๋“œ์˜ ์ฃผ์†Œ๋งŒ ์ฃผ์–ด์ง„ ์ผ์ •ํ•œ ์ž‘์—… ์ˆ˜์— ๋…ธ๋“œ๋ฅผ ์‚ฝ์ž…ํ•˜๊ฑฐ๋‚˜ ์‚ญ์ œํ•  ์ˆ˜ ์žˆ๋‹ค.
    • ๋‹จ์ผ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ์—์„œ ๋™์ผํ•œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋ ค๋ฉด ํ•ด๋‹น ๋…ธ๋“œ์— ๋Œ€ํ•œ ํฌ์ธํ„ฐ์˜ ์ฃผ์†Œ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์–ด์•ผ ํ•˜๋ฉฐ, ์ด ์ฃผ์†Œ๋Š” ์ „์ฒด ๋ฆฌ์ŠคํŠธ์˜ ํ•ธ๋“ค(์ฒซ ๋ฒˆ์งธ ๋…ธ๋“œ์˜ ๊ฒฝ์šฐ) ๋˜๋Š” ์ด์ „ ๋…ธ๋“œ์˜ ๋งํฌ ํ•„๋“œ ์ค‘ ํ•˜๋‚˜์—ฌ์•ผ ํ•œ๋‹ค.

XOR Linked List

  • ์–ด๋ ต๋‹ค...

Doubly Linked List ์˜ ์ถ”์ƒ์ž๋ฃŒํ˜•(ADT)

  • Node ์ƒ์„ฑ
    • ์„ค๋ช… : ๋…ธ๋“œ๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.
    • ๋ฉ”์†Œ๋“œ ๋ช… : constructor
    • ๋งค๊ฐœ๋ณ€์ˆ˜ :
    • ๋ฆฌํ„ด ๊ฐ’ :
  • Node ์ถ”๊ฐ€
    • ์„ค๋ช…: Node๋ฅผ ๋งจ ๋’ค์— ์ถ”๊ฐ€ํ•œ๋‹ค.
    • ๋ฉ”์†Œ๋“œ ๋ช…: add
    • ๋งค๊ฐœ๋ณ€์ˆ˜: Node node
    • ๋ฆฌํ„ด ๊ฐ’: void
  • Node ์‚ฝ์ž…
    • ์„ค๋ช… : ๋…ธ๋“œ๋ฅผ ์ค‘๊ฐ„์— ์‚ฝ์ž…ํ•œ๋‹ค.
    • ๋ฉ”์†Œ๋“œ ๋ช… : insert
    • ๋งค๊ฐœ๋ณ€์ˆ˜ : int input
    • ๋ฆฌํ„ด ๊ฐ’ : void
  • Node ์‚ญ์ œ
    • ์„ค๋ช…: ํ•ด๋‹นํ•˜๋Š” Node๋ฅผ ์ฐพ์•„์„œ ์ œ๊ฑฐํ•œ๋‹ค. || ํ•ด๋‹นํ•˜๋Š” Index์˜ Node๋ฅผ ์ฐพ์•„์„œ ์ œ๊ฑฐํ•œ๋‹ค.
    • ๋ฉ”์†Œ๋“œ ๋ช…: remove
    • ๋งค๊ฐœ๋ณ€์ˆ˜: Node node, int index
    • ๋ฆฌํ„ด ๊ฐ’: void
  • Node ํƒ์ƒ‰
    • ์„ค๋ช…: ํ•ด๋‹นํ•˜๋Š” Node๋ฅผ ์ฐพ์•„์„œ index๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
    • ๋ฉ”์†Œ๋“œ ๋ช…: search
    • ๋งค๊ฐœ๋ณ€์ˆ˜: Node node, int index
    • ๋ฆฌํ„ด ๊ฐ’: int index, Node node
  • List ๊ฐœ์ˆ˜
    • ์„ค๋ช… : ๋…ธ๋“œ์˜ ๊ฐœ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
    • ๋ฉ”์†Œ๋“œ ๋ช… : size
    • ๋งค๊ฐœ๋ณ€์ˆ˜ :
    • ๋ฆฌํ„ด ๊ฐ’ : int
  • Node ์ธ๋ฑ์Šค ๋ฐ์ดํ„ฐ ๊ฐ€์ ธ์˜ค๊ธฐ
    • ์„ค๋ช…: ํ•ด๋‹นํ•˜๋Š” index์˜ Node๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
    • ๋ฉ”์†Œ๋“œ ๋ช…: search
    • ๋งค๊ฐœ๋ณ€์ˆ˜: int index
    • ๋ฆฌํ„ด ๊ฐ’: Node node
  • Node Iterator
    • ๋‹ค์Œ Node๊ฐ€ ์žˆ๋Š”์ง€ ์—ฌ๋ถ€
  • Node previous

https://opentutorials.org/module/1335/8941

์˜ค๋Š˜์˜ ์†Œ๊ฐ

  • Hamill

    • ์ธ์› ์ถฉ๋‹น์ด ์‹œ๊ธ‰(๋‚ด๊ฐ€ ์„ค๋ ์„ค๋ ํ•˜๊ธฐ ์œ„ํ•ด)
    • ์˜ค๋Š˜ ๋„ˆ๋ฌด ์—ด์‹ฌํžˆ ํ•ด์„œ ์ž๋™ ๋ฐฐํฌ ๋ชปํ•  ๋“ฏ
    • ์ผ์ฃผ์ผ์— ํ•˜๋‚˜์”ฉ ์ž๋ฃŒ ๊ตฌ์กฐ์— ๋Œ€ํ•ด ์ƒ๊ฐํ•˜๊ณ  ๊ตฌํ˜„ํ•ด๋ณด๋Š” ์‹œ๊ฐ„์„ ๊ฐ€์กŒ๋”๋‹ˆ ๊ตฌํ˜„ํ•œ ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ์žŠ์ง€ ์•Š์„ ๊ฒƒ ๊ฐ™์Œ(๋ฌผ๋ก  ๊ตฌํ˜„ ์ฝ”๋“œ๋‚˜ ์ •ํ™•ํ•œ ์›๋ฆฌ๋Š” ์žŠ์–ด๋ฒ„๋ฆด ๊ฑฐ ๊ฐ™์ง€๋งŒ)
    • ์ข‹์€ ์Šคํ„ฐ๋”” ์‚ฌ๋ก€๋ฅผ ์ฐธ๊ณ ํ•ด์„œ ์ข‹์€ ์Šคํ„ฐ๋””๊ฐ€ ๋์œผ๋ฉด ํ•ฉ๋‹ˆ๋‹ค
  • Dion

    • ์—๋ฒ„๋ฃจ์ƒ ์—ฐ๋ฝ์ด ์—†์–ด์„œ ์‹œ๋ฌด๋ฃฉ...
    • ์˜ค๋Š˜ ์™œ์ด๋ฆฌ ์กธ๋ฆด๊นŒ์š”...
    • ๊ตฌํ˜„ํ•ด๋ณด๋ฉด์„œ ์ด๋ ‡๊ฒŒ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๊ฒ ๊ตฌ๋‚˜๋ฅผ ๋Š๊ผˆ์–ด์š”.
    • Linked List๊ฐ€ ์ข€ ๋” ๊ตฌ์ฒด์ ์œผ๋กœ ๋จธ๋ฆฌ์— ๋“ค์–ด์™”์–ด์š”.