큐(Queue)λž€?

λ¨Όμ € λ“€μ–΄κ°„ 데이터가 λ¨Όμ € λ‚˜μ˜€λŠ” 자료ꡬ쑰

  • FIFO(First In First Out) : μ„ μž…μ„ μΆœ
  • push : 큐에 μ‚½μž…ν•˜λŠ” μ—°μ‚° / pop : νμ—μ„œ κΊΌλ‚΄λŠ” μ—°μ‚°

 

큐의 λ™μž‘μ›λ¦¬

초기 λΉ„μ–΄μžˆλŠ” 큐

 

λΉ„μ–΄μžˆλŠ” 큐에 '2'와 '5'λ₯Ό μ°¨λ‘€λŒ€λ‘œ μ‚½μž…

 

νŒμ„ ν•˜λ©΄ λ¨Όμ € λ“€μ–΄κ°€ 있던 '2'κ°€ λ‚˜μ˜€κ³  ν•œ 번 더 μ§„ν–‰ν•˜λ©΄ '5'λ₯Ό 제거

 

큐의 νŠΉμ„±μ„ ν™œμš©ν•˜λŠ” λΆ„μ•Ό

μ—¬λŸ¬ μ΄λ²€νŠΈκ°€ λ°œμƒν–ˆμ„ λ•Œ λ°œμƒν•œ μˆœμ„œλŒ€λ‘œ μ²˜λ¦¬ν•˜λŠ” μž‘μ—…

  • μž‘μ—… λŒ€κΈ°μ—΄ : λ„€νŠΈμ›Œν¬ 톡신 μ‹œ λ‹€μˆ˜μ˜ ν΄λΌμ΄μ–ΈνŠΈμ—μ„œ μ„œλ²„μ— μž‘μ—…μ„ μš”μ²­ν•˜λ©΄ λ“€μ–΄μ˜¨ μˆœμ„œλŒ€λ‘œ μž‘μ—… 처리
  • 이벀트 처리 : μ–΄λ–€ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ΄λ‚˜ μ‹œμŠ€ν…œμ—μ„œ μ‚¬μš©μž 이벀트(ν‚€λ³΄λ“œ/마우슀) 처리

 

큐의 ADT (Abstract Data Type)

  • μŠ€νƒκ³Ό μœ μ‚¬ν•˜μ§€λ§Œ μŠ€νƒμ˜ top → 큐의 front(μ•ž) / rear(λ’€)
    • νλŠ” μ•žμ—μ„œ 데이터λ₯Ό λΉΌκ³  λ’€μ—μ„œ λ„£μœΌλ―€λ‘œ μ•žλ’€ μ΅œμ’…μœ„μΉ˜ μ €μž₯ ν•„μš”
ꡬ뢄 μ •μ˜ μ„€λͺ…
μ—°μ‚° boolean isFull() 큐에 λ“€μ–΄μžˆλŠ” 데이터 κ°œμˆ˜κ°€ maxsize인지 확인해 booleanκ°’ λ°˜ν™˜
(가득 μ°¨ μžˆλ‹€λ©΄ True / μ•„λ‹ˆλ©΄ False)
boolean isEmpty() 큐에 λ“€μ–΄μžˆλŠ” 데이터가 ν•˜λ‚˜λ„ μ—†λŠ”μ§€ 확인해 booleanκ°’ λ°˜ν™˜
(데이터가 ν•˜λ‚˜λΌλ„ 있으면 False / μ•„λ‹ˆλ©΄ True)
void push(Item Tyoe item) 큐에 데이터λ₯Ό ν‘Έμ‹œ
ItemType pop() νμ—μ„œ 처음 ν‘Έμ‹œν•œ 데이터λ₯Ό νŒν•˜κ³  κ·Έ 데이터 λ°˜ν™˜
μƒνƒœ Int front νμ—μ„œ κ°€μž₯ λ§ˆμ§€λ§‰μ— νŒν•œ λ°μ΄ν„°μ˜ μœ„μΉ˜λ₯Ό 기둝
Int rear νμ—μ„œ μ΅œκ·Όμ— ν‘Έμ‹œν•œ λ°μ΄ν„°μ˜ μœ„μΉ˜λ₯Ό 기둝
ItemType data[maxsize] 큐의 데이터λ₯Ό κ΄€λ¦¬ν•˜λŠ” λ°°μ—΄ (μ΅œλŒ€ maxsize개의 데이터 관리)

 

큐의 μ„ΈλΆ€λ™μž‘

큐의 기본ꡬ쑰
큐에 데이터λ₯Ό μΆ”κ°€ν•˜λŠ” 경우 (push)

 

νμ—μ„œ 데이터λ₯Ό κΊΌλ‚΄λŠ” 경우 (pop)

 

데이터λ₯Ό 계속 μΆ”κ°€ν•˜λŠ” 경우 (push)

 

큐 κ΅¬ν˜„ν•˜κΈ°

1) 리슀트λ₯Ό ν™œμš©ν•˜λŠ” 방식

  • push : append( )
  • pop : pop( )
    •  μ²« 번째 데이터λ₯Ό μ œκ±°ν•΄μ•Ό ν•˜λ―€λ‘œ pop(0) μ‚¬μš©
queue = []

# 큐에 데이터 μΆ”κ°€
queue.append(1)
queue.append(2)
queue.append(3)

# 큐의 맨 μ•ž 데이터 제거
first_item = queue.pop(0)
print(first_item)

# 큐에 데이터 μΆ”κ°€
queue.append(4)
queue.append(5)

# 큐의 맨 μ•ž 데이터 제거
first_item = queue.pop(0)
print(first_item)

 

2) 덱을 ν™œμš©ν•˜λŠ” 방식

  • DEQ(Double Ended Queue)
  • μ–‘ λμ—μ„œ μ‚½μž…μ΄λ‚˜ μ‚­μ œν•  수 μžˆλŠ” 큐λ₯Ό κ΅¬ν˜„ν•œ 것
from collections import deque

queue = deque()

# 큐에 데이터 μΆ”κ°€
queue.append(1)
queue.append(2)
queue.append(3)

# 큐의 맨 μ•ž 데이터 제거
first_item = queue.popleft()
print(first_item)

# 큐에 데이터 μΆ”κ°€
queue.append(4)
queue.append(5)

# 큐의 맨 μ•ž 데이터 제거
first_item = queue.popleft()
print(first_item)

β€» μ°Έκ³  자료 β€»

https://wikidocs.net/221191

+ Recent posts