[μλ£κ΅¬μ‘°] μ€ν, ν, λ°ν
π‘ 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())
μΆμ²
μ€νλ₯΄ν μ½λ©ν΄λ½ μκ³ λ¦¬μ¦ κ°μ
ν¨μ€νΈμΊ νΌμ€ μκ³ λ¦¬μ¦ κ°μ