소란한 블로그

Data Structures 02. 큐 (Queue) 본문

Computer Engineering/Data Structures

Data Structures 02. 큐 (Queue)

소란 2020. 12. 29. 22:12

큐 (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.LifoQueue()

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

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

# 데이터 꺼내기
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

.

.

.

2020년 8월 27일 from my velog

'Computer Engineering > Data Structures' 카테고리의 다른 글

Data Structures 03. 스택 (Stack)  (0) 2020.12.29
Data Structures 01. 배열 (Array)  (0) 2020.12.29
Comments