Queue()
, LifoQueue()
, PriorityQueue()
를 제공import queue
data_queue = queue.Queue()
data_queue.put(1)
data_queue.put(25)
data_queue.put(8)
data_queue.put(37)
data_queue.put(7)
print(data_queue) # <queue.Queue object at 0x000001D91AA75FD0>
print(data_queue.qsize()) # 5
# 먼저 넣은 데이터가 먼저 출력되는 것을 볼 수 있음
print(data_queue.get()) # 1
print(data_queue.get()) # 25
print(data_queue.get()) # 8
print(data_queue.get()) # 37
print(data_queue.get()) # 7
import queue
data_queue = queue.LifoQueue()
data_queue.put(1)
data_queue.put(25)
data_queue.put(8)
data_queue.put(37)
data_queue.put(7)
print(data_queue) # <queue.LifoQueue object at 0x000001FC63F05FD0>
print(data_queue.qsize()) # 5
# 나중에 입력된 데이터가 먼저 출력되는 것을 볼 수 있음
print(data_queue.get()) # 7
print(data_queue.get()) # 37
print(data_queue.get()) # 8
print(data_queue.get()) # 25
print(data_queue.get()) # 1
import queue
data_queue = queue.PriorityQueue()
data_queue.put((3, 1))
data_queue.put((2, "seunghye"))
data_queue.put((4, True))
data_queue.put((10, 10.23))
data_queue.put((7, "Hi"))
print(data_queue) # <queue.PriorityQueue object at 0x000001E26EE45FD0>
print(data_queue.qsize()) # 5
# 우선순위에 따라 출력이 되는 것을 볼 수 있음
print(data_queue.get()) # (2, 'seunghye')
print(data_queue.get()) # (3, 1)
print(data_queue.get()) # (4, True)
print(data_queue.get()) # (7, 'Hi')
print(data_queue.get()) # (10, 10.23)
# 빈 리스트 생성
queue_list = list()
print(queue_list) # []
def enqueue(data):
# append는 배열 맨 뒤 원소에 data를 추가해 줌
queue_list.append(data)
def dequeue():
# data는 리스트의 가장 첫 번째
data = queue_list[0]
# 꺼내진 원소는 삭제
del queue_list[0]
return data
# 0부터 15까지 2씩 증가하며 enqueue
for index in range(0, 15,2):
enqueue(index)
print(queue_list) # [0, 2, 4, 6, 8, 10, 12, 14]
# 먼저 들어온 원소부터 빠져나가는 것을 볼 수 있음
print(dequeue()) # 0
print(queue_list) # [2, 4, 6, 8, 10, 12, 14]
print(dequeue()) # 2
print(queue_list) # [4, 6, 8, 10, 12, 14]
print(dequeue()) # 4
print(queue_list) # [6, 8, 10, 12, 14]
class Queue(list):
enqueue = list.append
def dequeue(self):
return self.pop(0) # 첫번째 인덱스 항목을 제거하고 제거된 항목을 반환
def is_empty(self):
if not self:
return True
else:
return False
queue = Queue()
queue.enqueue(1)
print(queue) # [1]
queue.enqueue(2)
print(queue) # [1, 2]
queue.enqueue(3)
print(queue) # [1, 2, 3]
queue.enqueue(4)
print(queue) # [1, 2, 3, 4]
print(queue.is_empty()) # False
queue.dequeue()
print(queue) # [2, 3, 4]
queue.dequeue()
print(queue) # [3, 4]
queue.dequeue()
print(queue) # [4]
queue.dequeue()
print(queue) # []
print(queue.is_empty()) # 리스트가 비어 있으므로 True
리스트를 사용했을 경우, enqueue(추가)의 시간복잡도는 O(1)이며, dequeue(삭제)의 시간복잡도는 O(N)이다. 추가의 경우 큐의 맨 끝에서 일어나지만, 큐의 첫 번째 원소를 삭제할 경우에는 두 번째 원소부터 맨 마지막 원소까지 모든 원소들의 위치를 한 칸씩 옮겨주어야 하기 때문