2024. 2. 13. 14:16ㆍ코딩
대표적인 자료구조로는 스택과 큐가 존재한다.
간단하게 말하자면 스택은 Last in , First out 이고 큐는 First in , First out 이라고 할 수 있다.
이를 간단하게 예를들어 설명해보자
스택 ( Stack )
나중에 넣은 데이터를 먼저빼는 후입선출을 따른다.
예를들면 박스를 쌓는다거나 , 트럭에서 물건을 넣는 상황을 상상해보면 쉽다.
박스를 쌓을 때 박스를 차곡차곡 쌓다가, 뺄 때는 가장 최근에 넣은 것 부터 빼는 구조이다. 당연히 맨 아래것부터 빼는것은 불가능하겠지.
파이썬에서는 기본 리스트에서 append()를 사용하거나 pop() 매서드를 사용하여 구현한다.
stack = []
stack.append(1) # stack: [1]
stack.append(2) # stack: [1, 2]
stack.append(3) # stack: [1, 2, 3]
stack.append(4) # stack: [1, 2, 3, 4]
stack.pop() # stack: [1, 2, 3]
stack.pop() # stack: [1, 2]
stack.append(3) # stack: [1, 2, 3]
stack.pop() # stack: [1, 2]
큐 ( Queue )
큐(Queue)는 데이터를 먼저 넣은 것을 먼저 빼는 FIFO(First-In-First-Out) 구조를 가지고 있다.
이는 줄을 서는 것과 유사한데 먼저 온 사람이 먼저 서비스를 받는 것과 같은 개념이다.
큐는 파이썬에서 리스트와 함께 구현될 수 있다. 큐를 리스트로 구현하는 것은 가능하지만, 리스트의 pop(0) 메서드를 사용하는 것은 비효율적일 수 있다. 리스트의 pop(0) 메서드는 해당 요소를 삭제하고, 모든 요소를 왼쪽으로 이동시켜야 하기 때문이다.
이러한 연산은 많은 데이터를 다룰 때 성능 저하를 초래할 수 있다. 따라서 큐를 효율적으로 구현하기 위해 파이썬의 collections 모듈에서 제공하는 deque(덱, double-ended queue)를 사용하는 것이 좋다.
deque는 양쪽 끝에서의 append와 pop 연산이 O(1) 시간복잡도를 가지므로 큐에 적합하다.
from collections import deque
queue = deque()
queue.append(1) # queue: [1]
queue.append(2) # queue: [1, 2]
queue.append(3) # queue: [1, 2, 3]
queue.append(4) # queue: [1, 2, 3, 4]
queue.popleft() # queue: [2, 3, 4]
queue.popleft() # queue: [3, 4]
queue.append(5) # queue: [3, 4, 5]
queue.popleft() # queue: [4, 5]
'코딩' 카테고리의 다른 글
[Python] When we use deque ? (2) | 2024.02.18 |
---|---|
[Python] Talking about DFS , backtracking algorithm (0) | 2024.02.13 |
[Python] baekjoon 7785 : 회사에 있는 사람 (0) | 2024.02.13 |
[Python] 당신이 파이썬 가상환경을 사용해야하는 이유 (0) | 2024.02.05 |