줄을 서는 행위와 유사 하다.
가장 먼저 넣은 데이터를 가장 먼저 꺼낼 수 있는 구조
음식점에서 가장 먼저 줄을 선 사람이 제일 먼저 음식점에 입장하는 것과 동일
큐는 FIFO(Fist-In,First-Out)또는 LILO(Last-In,Last-Out)방식으로써 스택을 꺼내는 순서가 반대다.
여기서 처음들어온 순부터 4,5,8 이 된다. 여기서 4를 꺼내면 5가 노란색으로 온다.
용어
Enqueue: 데이터를 넣는 기능
Dequeue:데이터를 꺼내는 기능
import queue
data_queue = queue.Queue()
data_queue.put("funcoding")
data_queue.put(1)
data_queue.qsize() //2 (데이터의 갯수 확인)
data_queue.get() //queue에서는 데이터를 꺼낼 수만 있지, 어떤 데이터를 꺼내달라는 요청을 못함.
//data_queue.get() 하면 먼저 넣은 'funcoding' 꺼내기
data_queue.qsize() //1
data_queue.get() //두번째 값을 꺼낸다 즉, 1을 꺼낸다.
data_queue.qsize() //0이 된다.
LifoQueue()로 큐 만들기(LIFO)
import queue
data_queue = queue.LifoQueue()
data_queue.put("funcoding")
data_queue.put(1)
data_queue.qsize() //2
data_queue.get() //Lifoqueue는 Lifo이므로,마지막(1)부터 빠져나간다.
PriorityQueue()로 큐 만들기
각각의 데이터 마다, 우선순위 번호를 지정 가능하다. 데이터를 추출할 때는 가장 우선순위가 높은 데이터가 추출 하게끔 할 수 있다.
import queue
data_queue = queue.PriorityQueue()
data_queue.put((10,"korea")) //튜플로 해서 쌍으로 데이터를 넣게 되어 있다. 첫번째 값은 우선순위 두번째가 우선 순위다.
data_queue.put((5, 1)) //이렇게 삽입하면, 우선순위 5에 값은 1이다.
data_queue.put((15, "china"))
data_queue.qsize() //3
data_queue.get() //(5,1) //우선 순위가 낮은 것부터 나온다.
data_queue.get() //(10,'korea')
참고: 어디에 큐가 많이 쓰일까?
운영체제에서 멀티 테스킹을 구현하기 위해서 프로세스 스케쥴링 방식 구현하기 위해 많이 사용된다.
연습문제 1. 리스트 변수로 큐를 다루는 enqueue,dequeue 기능 구현해보기.
queue_list = list()
def enqueue(data) 데이터를 넣는 함수
queue_list.append(data)
def dequeue()
data = queue_list[0]
del queue_list[0]
return data
for index in range(10):
enqueue(index)
len(queue_list) // 10
dequeue() 1부터 순차적으로 10까지
'자료구조,알고리즘' 카테고리의 다른 글
자료구조[링크드 리스트] (0) | 2023.04.30 |
---|---|
자료구조[스택] (0) | 2023.04.29 |
자료구조[배열] (0) | 2023.04.29 |
연결리스트/ 그림으로 알아보는 자료구조편 (0) | 2023.04.13 |
think data structures 책 리뷰 4편 : [Java] Generic의 이해 (0) | 2023.04.13 |