Read this in other languages: ะ ัััะบะธะน, ็ฎไฝไธญๆ, ๆฅๆฌ่ช, Portuguรชs
์ปดํจํฐ๊ณตํ์์ ์ด์ค ์ฐ๊ฒฐ ๋ฆฌ์คํธ๋ ์์ฐจ์ ์ผ๋ก ๋งํฌ๋ ๋ ธ๋๋ผ๋ ๋ ์ฝ๋ ์ธํธ๋ก ๊ตฌ์ฑ๋ ๋งํฌ๋ ๋ฐ์ดํฐ ๊ตฌ์กฐ์ ๋๋ค. ๊ฐ ๋ ธ๋์๋ ๋งํฌ๋ผ๊ณ ํ๋ ๋ ๊ฐ์ ํ๋๊ฐ ์์ผ๋ฉฐ, ๋ ธ๋ ์์์์ ์ด์ ๋ ธ๋์ ๋ค์ ๋ ธ๋์ ๋ํ ์ฐธ์กฐ๋ฅผ ๊ฐ์ง๋๋ค. ์์ ๋ฐ ์ข ๋ฃ ๋ ธ๋์ ์ด์ ๋ฐ ๋ค์ ๋งํฌ๋ ๊ฐ๊ฐ ๋ฆฌ์คํธ์ ์ํ๋ฅผ ์ฉ์ดํ๊ฒ ํ๊ธฐ ์ํด์ ์ผ์ข ์ ์ข ๊ฒฐ์ (์ผ๋ฐ์ ์ผ๋ก ์ผํฐ๋ฌ๋ ธ๋ ๋๋ null)๋ฅผ ๋ํ๋ ๋๋ค. ์ผํฐ๋ฌ ๋ ธ๋๊ฐ ํ๋๋ง ์์ผ๋ฉด, ๋ชฉ๋ก์ด ์ผํฐ๋ฌ ๋ ธ๋๋ฅผ ํตํด์ ์ํ์ผ๋ก ์ฐ๊ฒฐ๋ฉ๋๋ค. ๋์ผํ ๋ฐ์ดํฐ ํญ๋ชฉ์ผ๋ก ๊ตฌ์ฑ๋์ด ์์ง๋ง, ๋ฐ๋ ์์๋ก ๋ ๊ฐ์ ๋จ์ผ ์ฐ๊ฒฐ ๋ฆฌ์คํธ๋ก ๊ฐ๋ ํ ํ ์ ์์ต๋๋ค.
๋ ๊ฐ์ ๋ ธ๋ ๋งํฌ๋ฅผ ์ฌ์ฉํ๋ฉด ์ด๋ ๋ฐฉํฅ์ผ๋ก๋ ๋ฆฌ์คํธ๋ฅผ ์ํํ ์ ์์ต๋๋ค. ์ด์ค ์ฐ๊ฒฐ ๋ฆฌ์คํธ์์ ๋ ธ๋๋ฅผ ์ถ๊ฐํ๊ฑฐ๋ ์ ๊ฑฐํ๋ ค๋ฉด, ๋จ์ผ ์ฐ๊ฒฐ ๋ฆฌ์คํธ์์ ๋์ผํ ์์ ๋ณด๋ค ๋ ๋ง์ ๋งํฌ๋ฅผ ๋ณ๊ฒฝํด์ผ ํ์ง๋ง, ์ฒซ ๋ฒ์งธ ๋ ธ๋ ์ด์ธ์ ๋ ธ๋์ธ ๊ฒฝ์ฐ ์์ ์ ์ถ์ ํ ํ์๊ฐ ์์ผ๋ฏ๋ก ์์ ์ด ๋ ๋จ์ํด์ ธ ์ ์ฌ์ ์ผ๋ก ๋ ํจ์จ์ ์ ๋๋ค. ๋ฆฌ์คํธ ์ํ ์ค ์ด์ ๋ ธ๋ ๋๋ ๋งํฌ๋ฅผ ์์ ํ ์ ์๋๋ก ์ด์ ๋ ธ๋๋ฅผ ์ฐพ๊ธฐ ์ํด ๋ฆฌ์คํธ๋ฅผ ์ํํ ํ์๊ฐ ์์ต๋๋ค.
Add(value)
Pre: value๋ ๋ฆฌ์คํธ์ ์ถ๊ฐํ๊ณ ์ ํ๋ ๊ฐ
Post: value๋ ๋ชฉ๋ก์ ๋์ ๋ฐฐ์น๋จ
n โ node(value)
if head = รธ
head โ n
tail โ n
else
n.previous โ tail
tail.next โ n
tail โ n
end if
end Add
Remove(head, value)
Pre: head๋ ๋ฆฌ์คํธ์ ์๋จ์ ์์น
value๋ ๋ฆฌ์คํธ์์ ์ ๊ฑฐํ๊ณ ์ ํ๋ ๊ฐ
Post: value๊ฐ ๋ฆฌ์คํธ์์ ์ ๊ฑฐ๋๋ฉด true; ์๋๋ผ๋ฉด false;
if head = รธ
return false
end if
if value = head.value
if head = tail
head โ รธ
tail โ รธ
else
head โ head.next
head.previous โ รธ
end if
return true
end if
n โ head.next
while n = รธ and value !== n.value
n โ n.next
end while
if n = tail
tail โ tail.previous
tail.next โ รธ
return true
else if n = รธ
n.previous.next โ n.next
n.next.previous โ n.previous
return true
end if
return false
end Remove
ReverseTraversal(tail)
Pre: tail์ ๋ฆฌ์คํธ์์ ์ํํ๊ณ ์ ํ๋ ๋
ธ๋
Post: ๋ฆฌ์คํธ๊ฐ ์ญ์์ผ๋ก ์ํ๋จ
n โ tail
while n = รธ
yield n.value
n โ n.previous
end while
end Reverse Traversal
Access | Search | Insertion | Deletion |
---|---|---|---|
O(n) | O(n) | O(1) | O(n) |
O(n)