Data Structures 02. 큐 (Queue)

Furie·2020년 8월 27일
0

Data Structures

목록 보기
2/3

큐 (Queue)

: 가장 먼저 넣은 데이터를 가장 먼저 꺼내도록 하는 데이터 구조

  • FIFO(First-In, First-Out) 또는 LILO(Last-In, Last-Out) 방식
  • 스택(stack)과 꺼내는 순서가 반대

+) Visualog

Terminologies

  • Enqueue : 큐에 데이터를 넣는 기능
  • Dequeue : 큐에서 데이터를 꺼내는 기능

Python Queue Library

  • Queue()
    : 가장 일반적인 큐 자료 구조 (FIFO)
  • LifoQueue()
    : 나중에 입력된 데이터가 먼저 출력되는 구조 (LIFO) ➔ 스택 구조
  • PriorityQueue()
    : 데이터마다 우선순위를 넣어서, 우선순위가 높은 순으로 데이터 출력

01. Queue()

import queue

# queue 선언
data_queue = queue.Queue()

# 데이터 삽입
data_queue.put("apple")
data_queue.put(1)

# 데이터 사이즈 확인
print(data_queue.qsize())

# 데이터 꺼내기 : 가장 먼저 들어간 데이터부터 순서대로 나옴
print('첫번째 데이터: ', data_queue.get())
print('두번째 데이터: ', data_queue.get())

print(data_queue.qsize())

--- 출력 결과 ---
2
첫번째 데이터: string
두번째 데이터: 1
0

02. LifoQueue()

: 변형된 정책을 사용 ➔ LIFO ➔ 가장 마지막에 넣은것이 가장 마지막에 나옴 (like a stack)

import queue

# queue 선언
data_queue = queue.LifoQueue()

# 데이터 삽입
data_queue.put("apple")
data_queue.put(1)

# 데이터 사이즈 확인
data_queue.qsize()

# 데이터 꺼내기
data_queue.get()

03. PriorityQueue()

: 각 데이터에 우선순위를 부여 ➔ tuple 사용
: 우선순위가 높은 순서대로 나옴 ➔ 데이터를 삽입하는 순서와 상관 없음

import queue

# queue 선언
data_queue = queue.PriorityQueue()

# 데이터 삽입
data_queue.put((4, 'Apple')) # tuple => (우선순위, 데이터)
data_queue.put((1, 'Lemon'))
data_queue.put((10, 'Peach'))
data_queue.put((3, 2))

print(data_queue.get())
print(data_queue.get())

--- 출력 결과 ---
(1, 'Lemon')
(3, 2)


How is would used?

: 운영체제에서 멀티 태스킹을 위한 프로세스 스케쥴링 방식을 구현하기 위해 많이 사용
+) 내용 추가, 이해 필요


Implementation Queue(FIFO) Using List

# list를 이용하여 queue 구현

data_list = []

def enqueue(data): # .put()
    data_list.append(data)

def dequeue(): # .get()
    data = data_list[0]
    del data_list[0]
    return data

# 데이터 생성
for index in range(10):
    enqueue(index)

print('data_list의 길이: ', len(data_list)) # .qsize()
print()

# 데이터 출력
print('현재 data_list: ')
for a in data_list:
    print(a)
print()


print('꺼낸 데이터: ', dequeue()) # 데이터 꺼내기
print()

print('현재 데이터 리스트: ', data_list)

--- 출력 결과 ---
data_list의 길이: 10
현재 data_list:
0
1
2
3
4
5
6
7
8
9
꺼낸 데이터: 0
현재 데이터 리스트: [1, 2, 3, 4, 5, 6, 7, 8, 9]

Implementation Queue(LIFO) Using List

Implementation Priority Queue Using List

profile
Be Brave and Go Higher

0개의 댓글