Bibi's DevLog ๐ค๐
[TIL - Codesquad] ์๋ฃ๊ตฌ์กฐ, ๋ฐฐ์ด, ๋ฆฌ์คํธ, ArrayList, LinkedList, Doubly Linked List ๋ณธ๋ฌธ
[TIL - Codesquad] ์๋ฃ๊ตฌ์กฐ, ๋ฐฐ์ด, ๋ฆฌ์คํธ, ArrayList, LinkedList, Doubly Linked List
๋น๋น bibi 2021. 1. 11. 15:08
TIL [210111]
Linked List(์ฐ๊ฒฐ ๋ฆฌ์คํธ, ๋งํฌ๋ ๋ฆฌ์คํธ)
ko.wikipedia.org/wiki/%EC%97%B0%EA%B2%B0_%EB%A6%AC%EC%8A%A4%ED%8A%B8
- ๊ฐ ๋
ธ๋๊ฐ ๋ฐ์ดํฐ์ ํฌ์ธํฐ๋ฅผ ๊ฐ์ง๊ณ ํ ์ค๋ก ์ฐ๊ฒฐ๋์ด ์๋ ์๋ฃ๊ตฌ์กฐ.
- ๋
ธ๋์ ํฌ์ธํฐ๊ฐ ๋ค์ ๋
ธ๋์์ ์ฐ๊ฒฐ์ ๋ด๋นํจ.
- ์ฅ์ : ๋ฐ์ดํฐ์ ์ถ๊ฐ์ ์ญ์ ๊ฐ O(1)์ ์๊ฐ์ ๊ฐ๋ฅํจ
- ๋จ์ : ํน์ ๋ฐ์ดํฐ ๊ฒ์์ O(n)์ ์๊ฐ์ด ๊ฑธ๋ฆผ
์๋ฃ๊ตฌ์กฐ๋ ๋ฌด์์ธ๊ฐ?
opentutorials.org/module/1335/8634
์๋ฃ๊ตฌ์กฐ (Data Structure, ๋ฐ์ดํฐ ์คํธ๋ญ์ณ)
: ๋ฐ์ดํฐ๋ฅผ ํจ์จ์ ์ผ๋ก ์ ์ฅํ๊ณ , ๊บผ๋ด๊ธฐ ์ฝ๊ฒ ๋ง๋๋ ๊ฒ.
(๊บผ๋ด์ฐ๊ธฐ ์ฝ๊ฒ ๋ฐ์ดํฐ๋ฅผ ์ ์ ๋ฆฌ์ ๋ํ๋ ๊ฒ)
์๋ฃ๊ตฌ์กฐ๋ฅผ ์ ํ์ฉํด ์์คํ
์ ํจ์จ์ ์ผ๋ก ์ค๊ณํ ์ ์๋ค.
๋ฐฐ์ด Array
opentutorials.org/module/1335/8677
๋ฐฐ์ด์ ๋ํ์ ์ธ ์๋ฃ๊ตฌ์กฐ ์ค ํ๋์ด๋ค.
- ๊ฐ ๋ฐ์ดํฐ์ ์ธ๋ฑ์ค๊ฐ ์๊ธฐ ๋๋ฌธ์ ๋ฐ์ดํฐ์ ์กฐํ๊ฐ ๋น ๋ฅด๋ค.
- ์ค๋ณต๋ ๋ฐ์ดํฐ๋ฅผ ํ์ฉํ๋ค
๋จ์
- ์ด๋ค ์ธ๋ฑ์ค์ ๊ฐ์ ์ถ๊ฐํ๋ฉด, ๊ธฐ์กด ๊ฐ์ ์ญ์ ๋๋ค - ๋ฎ์ด์์์ง๊ธฐ ๋๋ฌธ
- ์ด๋ค ์ธ๋ฑ์ค์ ๊ฐ์ด ์ญ์ ๋๋ฉด, ๊ทธ ๊ฐ ๋์ null์ด ๋ค์ด๊ฐ๋ค - ๋ฉ๋ชจ๋ฆฌ ๋ญ๋น ์ด๋ & null์ฒดํฌ ํ์.
-> ์ธ๋ฑ์ค๊ฐ ๊ฐ์ฅ ์ค์ํ ๊ฒฝ์ฐ ๋ฐฐ์ด์ ์ฌ์ฉํ๋ค.
๋ฆฌ์คํธ List
opentutorials.org/module/1335/8636
๋ฐ์ดํฐ๊ฐ null๊ฐ์ ๋นํ์์ด, ์ฐ์์ ์ผ๋ก ์์นํ๋ ์๋ฃ๊ตฌ์กฐ.
- "์์๊ฐ ์๋" ๋ฐ์ดํฐ๊ตฌ์กฐ - ๊ทธ๋์ ๋ฆฌ์คํธ๋ฅผ ์ํ์ค(sequence, ์์)๋ผ๊ณ ๋ ํ๋ค.
- ๋น ์๋ฆฌ๊ฐ ํ์ฉ๋์ง ์๋๋ค - ์ด๋ค ๊ฐ์ด ์ญ์ ๋๋ฉด ๋ค์ ๊ฐ๋ค์ด ๊ทธ ์๋ฆฌ๋ฅผ ์ฑ์ด๋ค
- ์ค๋ณต๋ ๋ฐ์ดํฐ๋ฅผ ํ์ฉํ๋ค
๋จ์
- ๋ฐ์ดํฐ ์๋ฆฌ๊ฐ ์์๋ก ๋ฐ๋๋ฏ๋ก, ์ธ๋ฑ์ค๋ฅผ ์๋ณ์๋ก ์ฌ์ฉํ ์ ์๋ค.
-> ์ธ๋ฑ์ค๊ฐ ์ค์ํ์ง ์์ ๊ฒฝ์ฐ ๋ฆฌ์คํธ๋ฅผ ์ฌ์ฉํ๋ค.
ArrayList์ LinkedList์ ๋น๊ต
ArrayList๋ ์ธ๋ฑ์ค๋ฅผ ํตํด ๋ฐ์ดํฐ๋ฅผ ์กฐํํ ๋ ๋ ์ ๋ฆฌํ๋ค.
LinkedList๋ ๋ฐ์ดํฐ์ ์ถ๊ฐ/์ญ์ ๊ฐ ๋น๋ฒํ ๋ ๋ ์ ๋ฆฌํ๋ค.
ArrayList
opentutorials.org/module/1335/8709
๋ฐฐ์ด์ ์ด์ฉํด์ ๋ฆฌ์คํธ๋ฅผ ๊ตฌํํ ๋ฆฌ์คํธ.
์ฅ์
- ์ธ๋ฑ์ค๋ฅผ ํตํ ๋ฐ์ดํฐ์กฐํ๊ฐ ๋น ๋ฅด๋ค.
(๋ด๋ถ์ ์ผ๋ก ๋ฐฐ์ด์ ์ด์ฉํ๊ธฐ ๋๋ฌธ์ ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉ ๊ฐ๋ฅ)
๋จ์
- ๋ฐ์ดํฐ ์ถ๊ฐ / ์ญ์ ๊ฐ ๋๋ฆฌ๋ค.
(๋ฐ์ดํฐ ์ถ๊ฐ : ๋ค์ ๋ฐ์ดํฐ๋ค์ ํ ์นธ์ฉ ๋ค๋ก ๋ฐ์ด์ผ ํ๊ธฐ ๋๋ฌธ)
(๋ฐ์ดํฐ ์ญ์ : ๋ค์ ๋ฐ์ดํฐ๋ค์ ํ ์นธ์ฉ ์์ผ๋ก ๋น๊ฒจ์ผ ํ๊ธฐ ๋๋ฌธ)
LinkedList
opentutorials.org/module/1335/8821
: ์์ ๊ฐ์ ์ฐ๊ฒฐ(link)์ ์ด์ฉํด์ ๋ฆฌ์คํธ๋ฅผ ๊ตฌํํ ๊ฒ.
์ปดํจํฐ์ ๋์์๋ฆฌ
์ปดํจํฐ์ 3๊ฐ์ง ์ฃผ์๋ถํ
1. ๋ฉ๋ชจ๋ฆฌ : = RAM
- ์๋๊ฐ ๋งค์ฐ ๋น ๋ฅธ ๋์ , ์ฉ๋์ด ์๋ค
- ์ ์์ด ๊บผ์ง๋ฉด ๋ฐ์ดํฐ๊ฐ ์ฌ๋ผ์ง๋ค.
- ์คํ์๋๋ฅผ ๊ฒฐ์ ํ๋ค.
2. ์คํ ๋ฆฌ์ง : HDD, SSD
- ์๋๊ฐ ๋๋ฆฐ ๋์ , ์ฉ๋์ด ํฌ๋ค
- ์ ์์ด ๊บผ์ ธ๋ ๋ฐ์ดํฐ๊ฐ ๋จ์ ์๋ค.
- ๋ฐ์ดํฐ๋ ๊ธฐ๋ณธ์ ์ผ๋ก ์คํ ๋ฆฌ์ง์ ์ ์ฅ๋๋ค.
- ํ๋ก๊ทธ๋จ์ ์คํํ๋ฉด, ํ๋ก๊ทธ๋จ๊ณผ ๋ฐ์ดํฐ๋ ์คํ ๋ฆฌ์ง์์ ๋ฉ๋ชจ๋ฆฌ๋ก ์ฎ๊ฒจ์ง๋ค(load).
3. CPU
- ๋ฉ๋ชจ๋ฆฌ์ ๋ก๋๋ ๋ฐ์ดํฐ๋ฅผ ์ด์ฉํด ์์
์ ํ๋ค.
๋ฉ๋ชจ๋ฆฌ๊ฐ ์คํ์๋๋ฅผ ๊ฒฐ์ ํ๊ธฐ ๋๋ฌธ์,
์ฑ๋ฅ์ ๋์ด๋ ค๋ฉด ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํจ์จ์ ์ผ๋ก ์ฌ์ฉํด์ผ ํ๋ค.
์ด๊ฒ์ด ์๋ฃ๊ตฌ์กฐ๋ฅผ ๋ฐฐ์ฐ๋ ์ด์ ์ด๋ค.(๋ฉ๋ชจ๋ฆฌ๋ฅผ ํจ์จ์ ์ผ๋ก ์ฌ์ฉํ๊ธฐ ์ํด)
๋ฉ๋ชจ๋ฆฌ์ ๊ตฌ์กฐ์ ArrayList, LinkedList
- ๋ฉ๋ชจ๋ฆฌ ๊ตฌ์กฐ๋ฅผ ์์ธํ ์๊ณ ์ถ๋ค๋ฉด '์ปดํจํฐ ๊ตฌ์กฐ computer architecture)'๋ฅผ ๊ณต๋ถํด์ผ.
- ArrayList์ ํฌํจ๋ ๋ฐ์ดํฐ๋ค์ ํ ๋ฉ์ด๋ฆฌ๋ก ํจ๊ป ์ ์ฅ๋๋ค.
: ArrayList ํฌ๊ธฐ๊ฐ ์ปค์ ธ ๋ ๋ง์ ๊ณต๊ฐ์ด ํ์ํด์ง๋ฉด, ์๋ฆฌ๊ฐ ๋ถ์กฑํ๊ธฐ ๋๋ฌธ์ ์๋ฆฌ๊ฐ ์๋ ๊ณณ์ผ๋ก ArrayList์์ฒด๋ฅผ ์ฎ๊ฒจ์ผ ํ๋ค.
: ArrayList์ ๋ฐ์ดํฐ ํ๋๋ element (์์) ๋ผ๊ณ ํ๋ค.
- LinkedList์ ํฌํจ๋ ๋ฐ์ดํฐ๋ค์ ์๋ก ๋ค๋ฅธ ์์น์ ์ ์ฅ๋๋ค.
: ๊ฐ ๋ฐ์ดํฐ๋ ๋ฐ๋ก ๋ท ๋ฐ์ดํฐ์ ์์น๋ง ์๊ณ ์๋ค.
: ํน์ ๋ฐ์ดํฐ๋ฅผ ์ฐพ์ผ๋ ค๋ฉด ์ฒ์๋ถํฐ ์์ํด ์ฐ๊ฒฐ๋ ๋ฐ์ดํฐ๋ฅผ ๋ชจ๋ ํ์ํด์ผ ํ๋ค.
: LinkedList์ ๋ฐ์ดํฐ ํ๋๋ node (๋
ธ๋, ๋ง๋๋ผ๋ ๋ป) ๋๋ vertex(๋ฒํ
์ค, ๊ผญ์ง์ ์ด๋ผ๋ ๋ป) ๋ผ๊ณ ํ๋ค.
LinkedList์ ๊ตฌ์กฐ - ๋ ธ๋ Node
: LinkedList๋ ๋
ธ๋์ ๋ชจ์์ด๋ค.
- LinkedList๋ ์ด๋ค ๊ฐ์ ํ์ํ๊ธฐ ์ํด head๊ฐ ๊ฐ๋ฆฌํค๋ ๋
ธ๋๋ถํฐ ์์ฐจ์ ์ผ๋ก ์ฐพ์์ผ ํ๋ค.
๋ ธ๋ Node
๋
ธ๋์ ๊ตฌ์ฑ์์ 2๊ฐ์ง
1. ๋
ธ๋์ ๊ฐ (data field)
- value์ ๊ฐ์ ๋ณ์๋ฅผ ํ ๋นํ๋ค.
2. ๋ค์ ๋
ธ๋ (link field)
- next๋ณ์๋ฅผ ์ฌ์ฉํ๋ค - ๋ค์ ๋
ธ๋์ ํฌ์ธํฐ๋ ์ฐธ์กฐ๊ฐ์ ์ ์ฅ.
- ์ฐธ์กฐ๊ฐ์ ํตํด ๋
ธ๋์ ๋
ธ๋๋ฅผ ์ฐ๊ฒฐํ๋ค.
Head
LinkedList์ ๋งจ ์๋ถ๋ถ.
- LinkedList๊ฐ ๊ฑด๋ฌผ์ด๋ผ๋ฉด head๋ ์ถ์
๋ฌธ์ด๋ค.
- LinkedList๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด head๊ฐ ๊ฐ๋ฆฌํค๋ ์ฒซ ๋ฒ์งธ ๋
ธ๋๋ฅผ ์ฐพ์์ผ ํ๋ค.
Java๋ก LinkedList ๊ตฌํํ๊ธฐ
opentutorials.org/module/1335/8857
Doubly Linked List(์ด์ค ์ฐ๊ฒฐ ๋ฆฌ์คํธ)
opentutorials.org/module/1335/8940
Doubly Linked List์ ๊ธฐ์กด LinkedList์ ์ฐจ์ด๋ ๋
ธ๋๊ฐ ์๋ฐฉํฅ์ผ๋ก ์ฐ๊ฒฐ๋์ด ์๋ค๋ ๊ฒ์ด๋ค.
1. ์ด์ ๋
ธ๋ (Previous Link Field)
2. ๋
ธ๋์ ๊ฐ (data field)
3. ๋ค์ ๋
ธ๋ (Next Link Field)
์ฅ์
: ์๋ฐฉํฅ์ผ๋ก ์ฐ๊ฒฐ๋์ด ์์ด ๋
ธ๋๋ฅผ ์์ชฝ์ผ๋ก ํ์ํ ์ ์๋ค.
- ํน์ ์ธ๋ฑ์ค์ ๋
ธ๋๋ฅผ ๊ฐ์ ธ์ฌ ๋, ๋ฐ๋ณต๋ฌธ์ผ๋ก ํ์ํ ๋ ์ ์ฉํ๋ค.
- ์๋ค๋ก ํ์์ด ๊ฐ๋ฅํ๋ค.
- ๋
ธ๋ ์์น๊ฐ ์ฒซ ์์์ ๊ฐ๊น์ฐ๋ฉด ๋งจ ์ฒ์๋ถํฐ, ๋ ์์์ ๊ฐ๊น์ฐ๋ฉด ๋งจ ๋๋ถํฐ ํ์ํ ์ ์๋ค (ํ์์๊ฐ ๊ฐ์)
๋จ์
- ์ด์ ๋
ธ๋ previous link field๋ฅผ ์ง์ ํ๊ธฐ ์ํด ๋ณ์๋ฅผ ํ๋ ๋ ์ฌ์ฉํด์ผ ํ๋ค = ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋ ๋ง์ด ์ฌ์ฉ
- ๊ตฌํ์ด ๋ ๋ณต์กํด์ง๋ค
-> ์ฅ์ ์ด ๋ ํฌ๊ธฐ ๋๋ฌธ์ ์ค์ ์ฌ์ฉ๋๋ linkedlist๋ ๋๋ถ๋ถ doubly linked list์ด๋ค.
Java๋ก Doubly Linked List ๊ตฌํํ๊ธฐ
opentutorials.org/module/1335/8941
** ๋ด์ผ ํ ์ผ **
๋น ์คํ๊ธฐ๋ฒ ์์, ์๋ฃ ๋ณด๊ณ ๊ณต๋ถํ๊ธฐ www.youtube.com/watch?v=6Iq5iMCVsXA&feature=youtu.be
๋ฏธ์ ๋ณธ๊ฒฉ์ ์ผ๋ก ๊ตฌํํ๊ณ ์ผ๋ฅธ ์ ์ถํ๊ธฐ
'TIL' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[TIL - Codesquad] ์๊ณ ๋ฆฌ์ฆ ๋๋ฒ๊น (6) | 2021.01.13 |
---|---|
[TIL - Codesquad] ๋น ์ค ํ๊ธฐ๋ฒ (2) | 2021.01.12 |
[TIL] ๊ฐ์ธ ๊ณต๋ถ - ์๋ฐ Map, HashMap (0) | 2021.01.10 |
[TIL - Codesquad] ๋ฆฌ๋ ์ค ๊ธฐ๋ณธ ๋ช ๋ น์ด์ ์ ์คํฌ๋ฆฝํธ (0) | 2021.01.08 |
[TIL - Codesquad] ๊ฐ์ํ๊ฒฝ(VM)์ ๋ฆฌ๋ ์ค ์ฐ๋ถํฌ, ssh์ค์นํ๊ณ ์๊ฒฉ์ ์ํ๊ธฐ (0) | 2021.01.08 |