[์ž๋ฃŒ๊ตฌ์กฐ]chapter2-lesson3. ๋‹จ์ผ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ

2025. 3. 10. 15:42ใ†[๐Ÿ’ปPython] pearl's python ๋ณ‘์•„๋ฆฌ ํƒˆ์ถœ๊ธฐ ๐Ÿฃ

 

์‚ฝ์ž…๊ณผ ์‚ญ์ œ๋ฅผ ๋งŽ์ด ํ•˜๋Š”๊ฒฝ์šฐ ํ•ด๋‹น ์ฝ”๋“œ๋Š” ๋น„ํšจ์œจ์ ์ด๊ฒŒ ๋œ๋‹ค. 

์ด๋Ÿฌํ•œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ์—ฐ๊ฒฐ  ๋ฆฌ์ŠคํŠธ๋ผ๋Š” ์ƒˆ๋กœ์šด ์ž๋ฃŒ๊ตฌ์กฐ๊ฐ€ ๋“ฑ์žฅํ•˜๊ฒŒ ๋œ๋‹ค ! 

 

์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ 

 

-ํƒ์ƒ‰์€ ๋А๋ฆฌ๋‹ค. O(N)

-์‚ฝ์ž…๊ณผ ์‚ญ์ œ ์—ฐ์‚ฐ์€ ๋งค์šฐ ๋น ๋ฅด๋‹ค O(1)

-์‚ฝ์ž…๊ณผ ์‚ญ์ œ๊ฐ€ ์žฆ์€ ์ƒํ™ฉ์—์„œ ์ž์ฃผ ์‚ฌ์šฉ๋œ๋‹ค. 

- ์—ฌ๋Ÿฌ๊ฐœ์˜ ๋…ธ๋“œ๊ฐ€ ๋ชจ์—ฌ์„œ ํ˜•์„ฑ๋˜๋Š” ๊ตฌ์กฐ

๋…ธ๋“œ๋ž€

- ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ๋ฅผ ์•Œ๊ธฐ์œ„ํ•ด ์ดํ•ดํ•ด์•ผ ํ•˜๋Š” ๊ฐœ๋…

- ์ •๋ณด๋ฅผ ๋‹ด๋Š” ํ•˜๋‚˜์˜ ์ฐฝ๊ตฌ๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค. 

- ์ผ๋ฐ˜์ ์œผ๋กœ ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ์—์„œ ํ•˜๋‚˜์˜ ๋…ธ๋“œ๋Š” ๋ฐ์ดํ„ฐ์™€ ๋‹ค๋ฅธ ๋…ธ๋“œ๋กœ ์ด๋™ํ•˜๋Š” ๊ฒฝ๋กœ๋ฅผ ๊ฐ–๊ณ  ์žˆ์Œ. 

๋‹จ์ผ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ

 

- ๋‹จ์ผ = ์—ฐ๊ฒฐ๋ฐฉํ–ฅ์ด ๋‹จ๋ฐฉํ–ฅ = ์ผ๋ฐฉํ†ตํ–‰ ๊ตฌ์กฐ

- ๋ฐ”๋กœ ์˜† ๋…ธ๋“œ๋ฅผ ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ์Œ. 

๋‹จ์ผ ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ์˜ ๋…ธ๋“œ๊ฐ€ ๊ฐ–๊ณ  ์žˆ๋Š” ๋‹ค๋ฅธ ๋…ธ๋“œ์˜ ์ฐธ์กฐ

- ๊ฐ ๋…ธ๋“œ๋ณ„๋กœ data์™€ next๊ฐ’์„ ๊ฐ€์ง€๊ณ  ์žˆ๋Š”๋ฐ data ๋Š” ๊ฐ’์„ next๋Š” ๋‹ค์Œ ๋…ธ๋“œ์˜ ์œ„์น˜๋ฅผ ๊ฐ€๋ฅดํ‚ค๋Š” ์—ญํ•  

- ์˜ˆ๋ฅผ ๋“ค์–ด ๊ฐ’์ด 4์ธ ๋…ธ๋“œ๊ฐ€ ์žˆ๋‹ค๋ฉด ๋‹ค์Œ ๋…ธ๋“œ๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์— next์—๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ null์ด ๋“ค์–ด์žˆ๋‹ค. 

- ์ˆ˜๋„ ์ฝ”๋“œ๋ฅผ ์ด์šฉํ•˜์—ฌ node1๊ณผ node2๋ฅผ ๋งŒ๋“ค๊ณ  ์ด๋ฅผ ์—ฐ๊ฒฐํ•ด๋ณด์ž.

#node1์„ ๋งŒ๋“ ๋‹ค. 
set node1 = node(3)

#node2๋ฅผ ๋งŒ๋“ ๋‹ค. 
set node2 = node(5) 

# node1๊ณผ node2๋ฅผ ์—ฐ๊ฒฐํ•œ๋‹ค. 
node1.next=node2

#node1.next๋Š” node2 ์ž์ฒด๋ฅผ ์˜๋ฏธํ•œ๋‹ค. 

print(node2.data) # 5
print(node2.next.data) # 5

 

- node1๊ณผ node2๋ฅผ ๋ถ„๋ฆฌํ•ด๋ณด์ž.

node1.next = null # ๋‘ ๊ด€๊ณ„๋ฅผ ๋Š๋Š”๋‹ค.

 

- next ๊ฐ’์— null์„ ๋„ฃ๋Š” ๊ฒƒ์€ ๋’ค์—์„œ ๋…ธ๋“œ๋ฅผ ์‚ญ์ œํ• ๋•Œ ์ด์šฉํ•˜๊ฒŒ ๋œ๋‹ค. 

 

๋‹จ์ผ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ์˜ ๋ฌธ์ œ์  : ์‹œ์ž‘์ ์„ ์ฐพ์„ ์ˆ˜ ์—†์Œ. 

 

-์‹œ์ž‘์ ์„ ์•Œ์ง€ ๋ชปํ•œ๋‹ค๋ฉด ์šฐ๋ฆฌ๊ฐ€ ๋ชจ๋“  ๊ฐ’์„ ํƒ์ƒ‰ํ–ˆ๋Š”์ง€ ํŒ๋‹จํ•  ์ˆ˜ ์—†์Œ. 

- ๊ทธ๋ž˜์„œ ๋ฆฌ์ŠคํŠธ์˜ ์ฒซ๋ฒˆ์งธ ๊ฐ’์˜ ์œ„์น˜๋ฅผ ๋ฐ˜๋“œ์‹œ ๋ช…์‹œํ•ด์•ผ ํ•จ. -> ์ด๋ฅผ head๋ผ๊ณ  ๋ถ€๋ฆ„. 

- ์ข…๋ฃŒ๋˜๋Š” ์‹œ์ ๋„ ๋ช…์‹œ -> tail์ด๋ผ๊ณ  ํ•จ. 

- ๋‹จ์ผ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ๋Š” ์‚ฝ์ž… ์‚ญ์ œ ํƒ์ƒ‰์ด ๋ชจ๋‘ ๊ฐ€๋Šฅํ•œ ์ž๋ฃŒ๊ตฌ์กฐ

-ํƒ์ƒ‰์˜ ๊ฒฝ์šฐ ,  head๋ถ€ํ„ฐ tail์„ ์ผ์ผํžˆ ํ™•์ธํ•ด์•ผ ํ•˜๋ฏ€๋กœ

 

๋‹จ์ผ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ - ์‚ฝ์ž… & ์‚ญ์ œ & ํƒ์ƒ‰

 

<์‚ฝ์ž…>
- tail ์€ next๊ฐ€ ๋น„์–ด์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ƒˆ๋กœ์šด ๋…ธ๋“œ๊ฐ€ ๋“ค์–ด์˜ค๊ฒŒ ๋˜๋ฉด next๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” ๋…ธ๋“œ๋ฅผ ํ•ด๋‹น ๋…ธ๋“œ๋กœ ์ง€์ •ํ•ด์ฃผ๋ฉด๋œ๋‹ค. 
- ๊ทธ๋Ÿฌ๋‚˜ ์ƒˆ๋กœ์šด ๋…ธ๋“œ๋Š” tail๋ณด๋‹ค ๋’ค์— ์œ„์น˜ -> ์ถ”๊ฐ€์ ์œผ๋กœ tail์ด ๊ฐ€๋ฆฌํ‚ค๋Š” ๋…ธ๋“œ๋ฅผ ๋ณ€๊ฒฝํ•ด์ค˜์•ผ ํ•จ. 
# tail ๋’ค์— ์‚ฝ์ž…ํ•˜๋Š” ์ฝ”๋“œ 
function SLL.insert_end(num) 
	set new_node = node(num) # 1. ๋…ธ๋“œ ๋งŒ๋“ค๊ธฐ 
    SLL.tail.next = new_node # 2. ์ด์–ด ๋ถ™์ด๊ธฐ 
    SLL.tail = new_node # 3. Tail ๋ณ€๊ฒฝํ•˜๊ธฐโ€‹
# head์•ž์— ์‚ฝ์ž…ํ•˜๋Š” ์ฝ”๋“œ 
function SLL.insert_front(num) 
    set new_node = node(num) # 1. ๋…ธ๋“œ ๋งŒ๋“ค๊ธฐ 
    new_node.next = SLL.head # 2. ์ด์–ด ๋ถ™์ด๊ธฐ 
    SLL.head = new_node # 3. head ๋ณ€๊ฒฝํ•˜๊ธฐ
# head๋ฐ”๋กœ ๋’ค์— ๋…ธ๋“œ๋ฅผ ์‚ฝ์ž…ํ•˜๋Š” ๊ฒฝ์šฐ 
function SLL.insert_after_head(num) 
	set new_node = node(num) # 1. ๋…ธ๋“œ ๋งŒ๋“ค๊ธฐ 
    new_node.next = SLL.head.next # 2. ์ƒˆ๋กœ์šด ๋…ธ๋“œ์˜ next ๊ฐ’ ๋ณ€๊ฒฝ
    SLL.head.next = new_node # 3. head์˜ next๊ฐ’ ๋ณ€๊ฒฝ
<์‚ญ์ œ>
- ์—ฐ๊ฒฐ์„ ์ œ๊ฑฐ 
- ์‚ญ์ œ๋˜๋Š” ๋…ธ๋“œ์˜ ๋ฐ”๋กœ ์ „ ๋…ธ๋“œ์—์„œ ๊ทธ ๋‹ค์Œ ๋…ธ๋„๋กœ ์—ฐ๊ฒฐ๊ด€๊ณ„๋ฅผ ๋ณ€๊ฒฝํ•ด์ค˜์•ผ ํ•จ. 
- tail ์‚ญ์ œ ์‹œ, tail ๋ฐ”๋กœ ์ „ ๋…ธ๋“œ์˜ next ๊ฐ’์„ ๋จผ์ € null๋กœ ๋ณ€๊ฒฝํ•œ ๋’ค tail์„ ๊ทธ ์ „์œผ๋กœ ์˜ฎ๊ฒจ์ฃผ๋Š” ์ž‘์—…์„ ํ•จ. 
- head ์‚ญ์ œ ์‹œ, head์˜ ๊ฐ’์„ head.next๋กœ ์ง€์ •ํ•˜๊ธฐ๋งŒ ํ•˜๋ฉด ๋จ. 
<ํƒ์ƒ‰>
- ๋‹จ์ผ ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ๋Š” ์‹œ์ž‘๊ณผ ๋์ด ๋ช…ํ™•ํ•ด์•ผ ์‹œ์ž‘์ ๋ถ€ํ„ฐ ๋์ ๊นŒ์ง€ next๋ฅผ ๋”ฐ๋ผ๊ฐ€๋ฉฐ ํƒ์ƒ‰์„ ์ง„ํ–‰ํ•  ์ˆ˜ ์žˆ์Œ.