# ex) 박스쌓기
stack = []
stack.append(5)
stack.append(2)
stack.append(3)
stack.append(7)
stack.pop() # 마지막에 쌓은 7 삭제
stack.append(1)
stack.append(4)
stack.pop() # 마지막에 쌓은 4 삭제
print(stack[::-1]) # 최상단 기준 출력 [1, 3, 2, 5]
print(stack) # 최하단 기준 출력 [5, 2, 3, 1]
from collections import deque
# 큐 구현 시 deque 라이브러리를 사용해야 한다.
queue = deque()
queue.append(5)
queue.append(2)
queue.append(3)
queue.append(7)
queue.popleft() # 가장 먼저 들어온 요소 5 삭제
queue.append(1)
queue.append(4)
queue.popleft() # 두번째로 들어온 요소 2가 삭제된다.
print(queue) # 먼저 들어온 순서대로 출력 deque([3, 7, 1, 4])
queue.reverse() # 역순으로 바꾸기
print(queue) # 나중에 들어온 원소부터 출력 deque([4, 1, 7, 3])
1) 단순히 리스트를 이용하여 구현 할 수 있다.
2) 힙(heap)을 이용하여 구현 할 수 있다.
우선순위 큐 구현 방식 | 삽입 시간 | 삭제 시간 |
---|---|---|
리스트 | O(1) | O(N) |
힙(Heap) | O(logN) | O(logN) |
import heapq
# 파이썬 내장 모듈 heapq 불러오기
heap = [] # 빈 리스트 생성
heap.heappush(heap,1)
heap.heappush(heap,4)
# heap.heappush(리스트명,삽입 원소) 원소를 삽입한다.
print(heap) # [1, 4]
print(heapq.heappop(heap)) # [1]
print(heap) # [4]
# heapq.heappop(리스트명) 원소를 삭제 (최솟값을 삭제한다.)
# 삭제하지 않고 최솟값 출력 시 print(heap[0])
# 최소값이 가장 위로 오는 이진 트리 구조로 heap[1] 이 두 번째로 작은 원소는 아니다.