본문 바로가기
자료구조와 알고리즘/자료구조

큐 (Queue)

by oncerun 2020. 8. 17.
반응형

1. 큐 구조

 가장 먼저 넣은 데이터를 가장 먼저 꺼낼 수 있는 구조입니다.

FIFO(First-in, First-Out) 또는 LILO(Last-in , Last-Out) 방식으로 스택과 꺼내는 순서가 반대입니다.

 

 

2. 큐 용어

 - Enqueue : 큐에 데이터를 넣는 기능

 - Dequeue : 큐에서 데이터를 꺼내는 기능

 

 

3. 큐 관련 라이브러리

 

 1) java

Queue 인터페이스를 제공해주며 구현체인

LinkedList, priorityQueue, priorityBlockingQueue를 사용합니다.

 

method 

 - void offer(Type data)  : 순차적으로 데이터를 저장합니다.

 - Type poll() : 가장 먼저 보관한 값을 꺼내고 반환합니다.

 - Type peek() : 가장 먼저 보관한 값을 단순 참조합니다. 꺼내지는 않습니다.

 - boolean empty : 해당 큐가 비어있는지 확인해 true/false값을 반환합니다.

 

 2) python

 

다양한 큐 구조로 Queue(), LifoQueue(), PriorityQueue() 제공

프로그램에 따라 적합한 자료구조를 사용

 - Queue : 가장 일반적인 큐 자료구조

import queue

data_queue = queue.Queue()

data_queue.put("입력")
data_queue.qsize() // 큐의 크기확인
data_queue.get() // 먼저 들어온 데이터를 꺼내온다. -> "입력" String 반환

 - LifoQueue : 나중에 입력된 데이터가 먼저 출력되는 구조 (stack구조)

import queue
data_queue = queue.LifoQueue()

data_queue.put("1")
data_queue.put("2")

data_queue.get() // 2가 출력됩니다.

 - PriorityQueue : 데이터마다 우선순위를 넣어서, 우선순위가 높은 순으로 데이터를 출력

import queue

data_queue = queue.PriorityQueue()

data_queue.put((10,"math"))
data_queue.put((5,"english"))
data_queue.put((15,"korea"))

우선순위 설정 

data_queue.get() -> (5,"english") 우선순위가 높은 english가 출력됩니다.

 

큐의 활용 예시

 

멀티 태스킹을 위한 프로세스 스케줄링 방식을 구현하기 위해 많이 사용됩니다.

 

프로세스 스케줄링은 CPU를 사용하려고 하는 프로세스들 사이의 우선순위를 관리하는 일입니다.

처리율과 CPU이용률을 증가시키고 오버헤드/응답 시간/반환시간/대기시간을 최소화시키기 위한 기법입니다.

 

 

기초 구현 (python)

 

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
    
 for out in range(10):
    dequeue() // 0,1,2,3,4,5,6,7,8,9

 

반응형

'자료구조와 알고리즘 > 자료구조' 카테고리의 다른 글

해쉬 테이블  (0) 2020.09.02
링크드 리스트  (0) 2020.08.26
스택  (0) 2020.08.18
배열  (0) 2020.08.17
자료구조  (0) 2020.07.29

댓글