본문 바로가기

프로그래머, 보안 관련 지식/자료구조 익숙해지기 (with python)

자료구조 : Queue in python

Queue(큐) FIFO(first in first out) 의 규칙을 가진 자료구조이다. 즉 먼저 들어온 요소가 먼저 나간다는 뜻이다. 

이러한 자료구조를 파이썬 코드로 나타내보자.

 

1. 일반적인 Queue 자료구조

 

1
2
3
import queue
 
data_queue = queue.Queue()
cs

 

위와 같이 정의하면 data_queue 라는 이름의 queue 자료구조가 간단하게 완성된다. 이제 data를 집어 넣고 빼는 코드를 짜보자.

 

1
2
3
4
5
6
7
data_queue.put("a"# a 입력
data_queue.put("b"# b 입력
data_queue.put("c"# c 입력
 
print(data_queue.get()) # a 출력
print(data_queue.get()) # b 출력
print(data_queue.get()) # c 
cs

put을 통해 내가 큐에 데이터를 집어넣을 수 있고, get을 통해 데이터를 먼저 입력한 순으로 하나씩 꺼낼 수 있다.

실행해보면 넣은 순서대로 값이 하나씩 나오는것을 알 수 있다.

 

2  우선순위 큐(Priority Queue) 

무조건 먼저 들어간 자료가 먼저 나오는 것이 아닌 각각 우선순위를 가지고 있어 그 우선순위에 따라서 자료를 꺼낼 수 있는 구조인 우선순위 큐를 파이썬 코드로 작성해보자. 큐와 마찬가지로 간단하게 작성하고 활용해 볼 수 있다.

 

1
2
3
4
5
6
7
8
9
10
import queue
 
data_queue = queue.PriorityQueue()
data_queue.put((5,"덜 중요한 약속"))
data_queue.put((3,"중요한 약속"))
data_queue.put((10,"안 중요한 약속"))
 
print(data_queue.get()) # 중요한 약속 출력
print(data_queue.get()) # 덜 중요한 약속 출력
print(data_queue.get()) # 안 중요한 약속 출력
cs

 

다음과같이 우선순위를 입력해서 우선순위 순서대로 나올 수 있게 할 수가 있다. 

 

** 큐(Queue) 형태의 자료구조가 많이 쓰이는 곳은?

운영체제의 멀티 태스킹을 위한 스케쥴링 방식에 활용된다. 

 

** 파이썬 리스트를 통해 queue 구현해보기

1
2
3
4
5
6
7
8
9
queue_list = list()
 
def enqueue(data): # queue에 data 집어넣기
    queue_list.append(data)
    
def dequeue(): # queue에 data 꺼내기
    data = queue_list[0]
    del queue_list[0]
    return data
cs

 

** 구현한 queue 예시

1
2
3
4
5
6
7
8
9
10
for index in range(10): # 0에서 9까지 순서대로 queue에 집어넣기
    enqueue(index)
 
dequeue() #0 출력됨
dequeue() #1 출력됨
dequeue() #2 출력됨
dequeue() #3 출력됨
.
.
 
cs