스택 - 한쪽 끝에서만 자료를 넣거나 뺄 수 있는 구조로 가장 나중에 쌓은 데이터를 가장 먼저 빼낼 수 있는 데이터 구조이다.
스택은 LIFO(Last In First Out - 마지막에 넣은 데이터를 가장 먼저 추출하는 데이터 관리 정책) 방식을 따른다.
push(): 데이터를 스택에 넣기
pop(): 데이터를 스택에서 꺼내기
장점
- 구조가 단순해서 구현이 쉽다.
- 데이터 저장/읽기 속도가 빠르다.
단점
- 데이터 최대 개수를 미리 정해놔야 한다.
-> 저장 공간의 낭비가 발생할 수 있다.
-> 미리 최대 개수만큼 저장 공간을 확보해야 한다.
코드로 구현(파이썬)
stack_list = []
def push(data):
stack_list.append(data)
def pop():
data = stack_list[-1]
del stack_list[-1]
return data
큐 - 가장 먼저 넣은 데이터를 가장 먼저 꺼낼 수 있는 구조, FIFO(Fist In, First Out)구조, 먼저 들어온 게 먼저 나간다.
Enqueue: 큐에 데이터를 넣는 기능
Dequeue: 큐에서 데이터를 꺼내는 기능
파이썬 Queue 라이브러리
- Queue(): 가장 일반적인 큐 자료 구조
- LifoQueue(): 나중에 입력된 데이터가 먼저 출력되는 구조(스택 구조)
- PriorityQueue(): 데이터마다 우선순위를 넣어서 우선순위가 높은 순으로 데이터 출력
큐는 멀티 태스킹을 위한 프로세스 스케쥴링 방식을 구현하기 위해 많이 사용된다.
코드로 구현(파이썬)
queue_list = []
def enqueue(data):
queue_list.append(data)
def dequeue(data):
data = queue_list[0]
del queue_list[0]
return data