Bibi's DevLog ๐Ÿค“๐ŸŽ

[TIL - Codesquad] ์ž๋ฃŒ๊ตฌ์กฐ, ๋ฐฐ์—ด, ๋ฆฌ์ŠคํŠธ, ArrayList, LinkedList, Doubly Linked List ๋ณธ๋ฌธ

TIL

[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

 

LinkedList - Java ๊ตฌํ˜„ - Data Structure (์ž๋ฃŒ๊ตฌ์กฐ)

์—ฌ๊ธฐ์„œ๋Š” Java์—์„œ LinkedList๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. LinkedList์˜ ์‚ฌ์šฉ๋ฐฉ๋ฒ•์€ ์ด๋ฏธ ArrayList API ์‹œ๊ฐ„์— ์‚ดํŽด๋ดค์Šต๋‹ˆ๋‹ค. ArrayList์™€ LinkedList ๋ชจ๋‘ List์— ๋Œ€ํ•ด์„œ ๊ตฌํ˜„๋ฐฉ๋ฒ•๋งŒ ๋‹ฌ๋ฆฌํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

opentutorials.org

 

 

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

 

Doubly linked list - Java ๊ตฌํ˜„ - Data Structure (์ž๋ฃŒ๊ตฌ์กฐ)

์ด์ค‘ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ๋Š” ๋‹จ์ˆœ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์•ฝ๊ฐ„์˜ ๋ณ€ํ˜•์„ ๊ฐ€ํ•œ ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— ๋‹จ์ˆœ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ์˜ ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ ์ ‘๊ทผํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ๋Š” ์ฐจ์ด์ ์„ ์ค‘์‹ฌ์œผ๋กœ ์•Œ์•„๋ณด

opentutorials.org

 

 

** ๋‚ด์ผ ํ•  ์ผ **

๋น…์˜คํ‘œ๊ธฐ๋ฒ• ์˜์ƒ, ์ž๋ฃŒ ๋ณด๊ณ  ๊ณต๋ถ€ํ•˜๊ธฐ www.youtube.com/watch?v=6Iq5iMCVsXA&feature=youtu.be

๋ฏธ์…˜ ๋ณธ๊ฒฉ์ ์œผ๋กœ ๊ตฌํ˜„ํ•˜๊ณ  ์–ผ๋ฅธ ์ œ์ถœํ•˜๊ธฐ