
ν(queue)λ λ°μ΄ν° μμλ₯Ό ν μ€λ‘ λμ΄μΈμ°λ μλ£ κ΅¬μ‘°
πν λν μ νꡬ쑰λΌλ μ μμ μ€νκ³Ό μ μ¬νμ§λ§ λ°λμ μ±μ§μ κ°μ§κ³ μμ΅λλ€. μ΄λ μμ μμ νμ λ€μ΄ μλ λ°μ΄ν° μμλ₯Ό κΊΌλ΄λ©΄ νμ λ€μ΄ μλ μμλ€ μ€ κ°μ₯ λ¨Όμ λ£μλ κ²μ΄ κΊΌλ΄μ§λλ€. λ°λΌμ νλ₯Ό μ μ μ μΆ (FIFO; first-in first-out) μ΄λΌκ³ λ λΆλ¦ λλ€.
νμ λμλ μ€νκ³Ό μ μ¬ν©λλ€. λΉμ΄μλ νλ₯Ό μμ±, μ€νμ λ°μ΄ν°λ₯Ό μΆκ°, ν μμ λ°μ΄ν°λ₯Ό μΆμΆ.
νλ μ ν λ°°μ΄μ μ΄μ©ν μ°κ²° 리μ€νΈμμ λν μ°μ°μ΄ νμ κΈΈμ΄μ λΉλ‘νλ λ§νΌμ μκ°μ μμν©λλ€. λ°°μ΄μ μ μ₯λ λ°μ΄ν° μμλ€μ νλνλ μ μΉΈμΌλ‘ λΉκ²¨μ μμΉλ₯Ό μ‘°μ ν΄μΌ νκΈ° λλ¬Έμ λλ€. κ·Έλμ μ°μ°μ μκ° λ³΅μ‘λ μΈ‘λ©΄μμλ μ°κ²° 리μ€νΈλ‘ νλ₯Ό ꡬννλ κ²μ΄ μ 리ν©λλ€.
λ€μμ μ°κ²°λ¦¬μ€νΈλ‘ ꡬνν νμ μ½λ μ λλ€.
class LinkedListQueue:
def __init__(self):
self.data = DoublyLinkedList()
def size(self):
return self.data.getLength()
def isEmpty(self):
return self.data.getLength()==0
def enqueue(self,item):
node = Node(item)
self.data.insertAt(self.data.nodeCount+1, node)
def dequeue(self):
return self.data.popAt(1)
def peek(self):
return self.data.getAt(1).data
def solution(x):
return 0
πνν νλ μ ν΄μ§ κ°μμ μ μ₯곡κ°μ λΉ λλ €κ°λ©° μ΄μ©ν©λλ€. νκ° κ°λμ°¨λ©΄ μ¬μ© λΆκ°λ₯νκ³ , ν κΈΈμ΄λ₯Ό κΈ°μ΅νκ³ μμ΄μΌλ©λλ€.
νν νμ μ°μ°μ μ§λλ² νμ λμΌν μ°μ° + isFull()μ΄ μΆκ°λμμ΅λλ€. isFull() μ°μ°μ νμ λ°μ΄ν° μμκ° κ½ μ°¨ μλμ§λ₯Ό νλ¨νλ μ°μ°μ λλ€.
λ€μμ λ°°μ΄λ‘ ꡬνν νν ν μ½λμ λλ€.
class CircularQueue:
def __init__(self,n):
self.maxCount = n
self.data = [None]*n
self.count = 0
self.front = -1
self.rear = -1
def size(self):
return self.count
def isEmpty(self):
return self.count ==0
def isFull(self):
return self.count == self.maxCount
def enqueue(self, x):
if self.isFull():
raise IndexError('Queue full')
self.rear = (self.rear + 1) % self.maxCount
# λΉ λμμΌ νλ―λ‘ maxCount λλ λλ¨Έμ§κ° index
self.data[self.rear]=x
self.count+=1
def dequeue(self):
if self.isEmpty():
raise IndexError('Queue empty')
self.front = (self.front + 1) % self.maxCount
x = self.data[self.front]
self.count -= 1
return x
def peek(self):
if self.isEmpty():
raise IndexError('Queue empty')
return self.data[(self.front + 1) % self.maxCount]
μ°μ μμ ν(Priority Queues)λ νμ μμλ₯Ό μΆκ°νλ μ°μ°μ λ€λ₯Έ μ μ΄ μλ, νμμ μμλ₯Ό κΊΌλ΄λ μμΉμ μμλ€ μ¬μ΄μ μ°μ μμμ λ°λ₯΄λ μλ£κ΅¬μ‘°μ΄λ€.
μ°μ μμ νλ₯Ό ꡬννλ λ°μλ λ κ°μ§μ μλ‘ λ€λ₯Έ μ κ·Ό λ°©λ²μ μκ°ν μ μμ΅λλ€
μ¬κΈ°μλ μλ°©ν₯ μ°κ²° 리μ€νΈλ₯Ό μ ννμ¬ μ°μ μμ νλ₯Ό ꡬννκΈ°λ‘ νκ³ , μμλ₯Ό μΆκ°ν λ μ°μ μμμ λ°λ₯Έ μλ§μ μ리λ₯Ό μ°Ύμμ μ λ ¬λ ννλ‘ μ μ§ν΄ λκ³ κΊΌλΌ λ ν μͺ½ λμμ κΊΌλΌ μ μλλ‘ μ½λλ₯Ό λ§λ€μ΄λ³΄μμ΅λλ€.
class PriorityQueue:
def __init__(self):
self.queue = DoublyLinkedList()
def size(self):
return self.queue.getLength()
def isEmpty(self):
return self.size() == 0
def enqueue(self, x):
newNode = Node(x)
curr = self.queue.head
while curr.next.data != None and x < curr.next.data:
curr = curr.next
self.queue.insertAfter(curr, newNode)
def dequeue(self):
return self.queue.popAt(self.queue.getLength())
def peek(self):
return self.queue.getAt(self.queue.getLength()).data
! μ°μ μμ νλ λμ€μ μ‘°κΈ λ€λ₯Έ μλ£ κ΅¬μ‘°λ₯Ό μ΄μ©νμ¬ λμ± ν¨μ¨μ μΌλ‘ ꡬνν μ μμ΅λλ€.
π‘νν νλ₯Ό ꡬνν¨μ μμ΄μ μ νλ°°μ΄λ‘ ꡬννμμ§λ§, μλ°©ν₯ μ°κ²°λ¦¬μ€νΈλ₯Ό μ¬μ©νμ¬ κ΅¬ννλ€λ©΄ νμ ν¬κΈ°κ° μ νλμ§ μκ³ νμν λ©λͺ¨λ¦¬λ§ μ¬μ©ν μ μλ€λ μ₯μ μ΄ μμ κ² κ°λ€.