๊ด€๋ฆฌ ๋ฉ”๋‰ด

DOing

[์ž๋ฃŒ๊ตฌ์กฐ] ์Šคํƒ, ํ, ๋ฐํ ๋ณธ๋ฌธ

์•Œ๊ณ ๋ฆฌ์ฆ˜

[์ž๋ฃŒ๊ตฌ์กฐ] ์Šคํƒ, ํ, ๋ฐํ

mangdo 2021. 6. 22. 21:59

๐Ÿ’ก Stack(์Šคํƒ)

: ์Šคํƒ์€ ํ•œ์ชฝ ๋์œผ๋กœ๋งŒ ์ž๋ฃŒ๋ฅผ ๋„ฃ๊ณ  ๋บ„ ์ˆ˜ ์žˆ๋Š” ์ž๋ฃŒ ๊ตฌ์กฐ์ด๋‹ค.

: LIFO(Last In, First Out) ๊ตฌ์กฐ์ด๋‹ค.

์Šคํƒ

๐Ÿ’ก ์Šคํƒ์˜ ํŠน์ง•

[ ์žฅ์  ]

    : ๊ตฌ์กฐ๊ฐ€ ๋‹จ์ˆœํ•ด์„œ ๊ตฌํ˜„์ด ์‰ฝ๋‹ค.

    : ๋ฐ์ดํ„ฐ ์ €์žฅ/์ฝ๊ธฐ ์†๋„๊ฐ€ ๋น ๋ฅด๋‹ค.

 

[ ๋‹จ์  ]

1) ๋ฐ์ดํ„ฐ ์ตœ๋Œ€ ๊ฐฏ์ˆ˜๋ฅผ ๋ฏธ๋ฆฌ ์ •ํ•ด์•ผํ•œ๋‹ค.

   -> ๋ฐ์ดํ„ฐ๋ฅผ ๋ฌดํ•œ์ •์œผ๋กœ ์Œ“์„ ์ˆ˜๋Š” ์—†๋‹ค. ์Œ“๊ธฐ์œ„ํ•ด์„œ๋Š” ๋ฏธ๋ฆฌ ์ตœ๋Œ€ ๊ณต๊ฐ„์„ ํ™•๋ณดํ•ด์•ผํ•œ๋‹ค. 

   -> ํŒŒ์ด์ฌ์˜ ๊ฒฝ์šฐ ์žฌ๊ท€ํ•จ์ˆ˜๋Š” 1000๋ฒˆ๊นŒ์ง€๋งŒ ํ—ˆ์šฉํ•œ๋‹ค. 1000๊ฐœ๋งŒํผ์˜ ๊ณต๊ฐ„ ํ™•๋ณดํ–ˆ๋‹จ ์†Œ๋ฆฌ๊ธฐ๋„ ํ•˜๋‹ค.

2) ์ €์žฅ ๊ณต๊ฐ„์˜ ๋‚ญ๋น„๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.

   -> ์ตœ๋Œ€ ๊ฐฏ์ˆ˜๋ฅผ ๋ฏธ๋ฆฌ ์ •ํ•ด์•ผํ•˜๊ธฐ๋•Œ๋ฌธ์ด๋‹ค.

 

[ ์Šคํƒ ํ™œ์šฉ ]

: ํ”„๋กœ์„ธ์Šค ์‹คํ–‰ ๊ตฌ์กฐ

๋”๋ณด๊ธฐ

ํ”„๋กœ๊ทธ๋žจ์ด ์‹คํ–‰๋˜๋Š” ์ƒํƒœ๋ฅผ ํ”„๋กœ์„ธ์Šค๋ผ๊ณ  ํ•˜๋Š”๋ฐ ํ”„๋กœ์„ธ์Šค์•ˆ์—์„œ ํ•จ์ˆ˜๊ฐ€ ํ˜ธ์ถœ๋˜๋Š” ํ˜•ํƒœ๋‹ค.

ํ”„๋กœ์„ธ์Šค ์Šคํƒ๊ตฌ์กฐ์— recursiveํ•จ์ˆ˜๊ฐ€ ํ˜ธ์ถœ๋œ๊ฒƒ์„ ์ €์žฅํ•œ๋‹ค.

 ํ•จ์ˆ˜์œ„์— ํ•จ์ˆ˜๊ฐ€ ํ˜ธ์ถœ๋˜๋ฉด ์Šคํƒ๊ณผ ๊ฐ™์€ ๊ตฌ์กฐ๋กœ ์ƒ๋‹จ์— ์Œ“์ธ๋‹ค. ํ•จ์ˆ˜๊ฐ€ ์œ„๋กœ ์ฐจ๊ณก์ฐจ๊ณก ์Œ“์ด๊ณ  ๋งจ์œ„์˜ ํ•จ์ˆ˜๋ถ€ํ„ฐ ์‚ญ์ œ๋œ๋‹ค. ๋งจ์œ„์˜ ํ•จ์ˆ˜๊ฐ€ ์‚ญ์ œ๋˜๋ฉด(๋๋‚˜๋ฉด) ๊ทธ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•œ ๋‹ค์Œ ํ•จ์ˆ˜๊ฐ€ ๋ถˆ๋ ค์ง€๋Š” ํ˜•ํƒœ๋กœ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋™์ž‘ํ•œ๋‹ค. ์ด ํ˜•ํƒœ๋ฅผ ๊ตฌํ˜„ํ•˜๋Š”๋ฐ ๊ฐ€์žฅ ํšจ๊ณผ์ ์ธ ์ž๋ฃŒ๊ตฌ์กฐ๊ฐ€ ์Šคํƒ์ด๋‹ค.

def recursive(data):
    if data<0:
        print('ended')
    else :
        print('start', data)
        recursive(data-1)
        print("returned", data)

recursive(4)
์ถœ๋ ฅ๊ฒฐ๊ณผ

 

 

๐Ÿ’ก ์Šคํƒ ๊ตฌํ˜„ํ•˜๊ธฐ

stack_list = list()

def push(data):
    stack_list.append(data)

def pop():
    data = stack_list[-1]
    del stack_list[-1] # ๋งˆ์ง€๋ง‰๋ฐ์ดํ„ฐ=๊ฐ€์žฅ๋‚˜์ค‘์— ๋“ค์–ด๊ฐ„ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ญ์ œ
    return data

for index in range(10):
    push(index)

print(pop()) #9
print(stack_list)

 

๐Ÿ’ก ํŒŒ์ด์ฌ์—์„œ ์Šคํƒ ์‚ฌ์šฉ

data_stack = list()

data_stack.append(1)
data_stack.append(2)

print(data_stack) #[1,2]
print(data_stack.pop()) #2

 

 


๐Ÿ’ก Queue(ํ)

: ํ๋Š” ํ•œ์ชฝ ๋์œผ๋กœ ์ž๋ฃŒ๋ฅผ ๋„ฃ๊ณ , ๋ฐ˜๋Œ€์ชฝ์—์„œ๋Š” ์ž๋ฃŒ๋ฅผ ๋บ„ ์ˆ˜ ์žˆ๋Š” ์ž๋ฃŒ๊ตฌ์กฐ์ด๋‹ค.

: FIFO(First In, First Out) ๊ตฌ์กฐ์ด๋‹ค.

 

[ ํ์˜ ํ™œ์šฉ ]

- ๋“ค์–ด์˜จ ์ˆœ์„œ๋Œ€๋กœ ์ผ์„ ์ฒ˜๋ฆฌํ•ด์•ผํ•  ๋•Œ ๋งŽ์ด ์‚ฌ์šฉ๋œ๋‹ค.

- ex) ์šด์˜์ฒด์ œ์˜ ๋ฉ€ํ‹ฐํƒœ์Šคํ‚น์„ ์œ„ํ•œ ํ”„๋กœ์„ธ์Šค ์Šค์ผ€์ค„๋ง ๊ตฌํ˜„

ํ

๐Ÿ’ก ํ ๊ตฌํ˜„ํ•˜๊ธฐ

queue_list = list()

def enqueue(data):
	queue_list.append(data)

def dequeue():
	data = queue_list[0] # ๋งจ ์•ž ๋ฐ์ดํ„ฐ ๊บผ๋‚ด๊ธฐ
	del queue_list[0] # ๋งจ ์•ž ๋ฐ์ดํ„ฐ ์‚ญ์ œ
	return data

for index in range(10):
	enqueue(index)
print(queue_list)

dequeue() # 0 ์‚ญ์ œ
dequeue() # 1 ์‚ญ์ œ
print(queue_list)

 

๐Ÿ’ก ํŒŒ์ด์ฌ์—์„œ ํ ์‚ฌ์šฉ

ํŒŒ์ด์ฌ์€ ํ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ง€์›ํ•œ๋‹ค. ํ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์—์„œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ณ€ํ˜•๋œ ํ๋„ ์ œ๊ณตํ•˜๊ณ  ์žˆ๋‹ค.

1. Queue() : ๊ฐ€์žฅ ์ผ๋ฐ˜์ ์ธ ํ ์ž๋ฃŒ๊ตฌ์กฐ

2. LifoQueue() : Last in, First Out(=์Šคํƒ๊ตฌ์กฐ)

3. PriorityQueue() : ๋ฐ์ดํ„ฐ๋งˆ๋‹ค ์šฐ์„ ์ˆœ์œ„๋ฅผ ๋„ฃ์–ด์„œ ์šฐ์„ ์ˆœ์œ„๋Œ€๋กœ ์ถœ๋ ฅ

import queue

# ์ผ๋ฐ˜์ ์ธ ํ
data_queue = queue.Queue()
data_queue.put(abc)
data_queue.put(123)

data_queue.qsize() #2
data_queue.get() #abc
data_queue.get() #123

# LIFOํ
data_lifo = queue.LifoQueue()
data_lifo.put(abc)
data_lifo.put(123)
data_lifo.get() #123

# priorityQueue
data_priority = queue.PriorityQueue()
data_priority((10,"korea")) #๋ฐ์ดํ„ฐ๊ฐ€ ํŠœํ”Œ๋กœ ๋“ค์–ด๊ฐ„๋‹ค.
data_priority((15,"china")) 
data_priority((5,1))

data_priority.size() #3
data_priority.get() #1
data_priority.get() #korea

 

 


๐Ÿ’ก Deque(Double Ended Queue)

: ์–‘ ๋์—์„œ ์‚ฝ์ž…๊ณผ ์‚ญ์ œ๊ฐ€ ๊ฐ€๋Šฅํ•œ ์ž๋ฃŒ๊ตฌ์กฐ์ด๋‹ค.

: ์Šคํƒ๊ณผ ํ์˜ ์„ฑ์งˆ์„ ๋ชจ๋‘ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.

๋ฐํ

[ ๋ฐํ ์‚ฌ์šฉํ•˜๊ธฐ ]

from collections import deque

deque = deque()
deque.append(2)
deque.append(3)
deque.appendleft(1)
print(deque)

print(deque.pop())
print(deque.popleft())

 

 

 

 

 

 

์ถœ์ฒ˜

์ŠคํŒŒ๋ฅดํƒ€ ์ฝ”๋”ฉํด๋Ÿฝ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ฐ•์˜

ํŒจ์ŠคํŠธ์บ ํผ์Šค ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ฐ•์˜

๋‚˜๋ฌด์œ„ํ‚ค : ํ