1. 큐 구조
  • 가장 먼저 넣은 데이터를 가장 먼저 꺼낼 수 있는 구조
  •  웨이팅할 때, 가장 먼저 줄 선 사람이 가장 먼저 입장하는 것과 동일
  •  FIFO(First-In / First-Out) : 가장 먼저 들어 간 데이터 가장 먼저 나옴
  •  LILO(Last-In / Last-Out) : 가장 마지막으로 들어간 데이터 가장 마지막에 나옴

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

 

3. 파이썬 queue 라이브러리
  • Queue() : 가장 일반적인 큐
  • LifoQueue() : 나중에 들어간 데이터가 먼저 나오는 구조를 가진 큐(=스택)
  • PriorityQueue() : 우선순위 큐, 데이터마다 우선순위도 넣어서 우선순위가 높은 순으로 데이터 나옴

4. Queue() 사용
import queue
queue_data = queue.Queue()
4-1) queue 데이터 삽입
queue_data.put("queue1")
queue_data.put("queue2")
queue_data.put("queue3")
4-2) queue 크기
queue_data.qsize()
# 출력 화면 : 3
4-3) queue 데이터 추출
queue_data.get()
# 출력화면 : queue1

'''
# 큐 순서대로 출력해보기
for i in range(queue_data.qsize()):
    print(queue_data.get())
# 출력 화면 :
queue1
queue2
queue3

queue_data.qsize()
# 출력 화면 : 0
'''

5. LifoQueue() 사용
import queue
queue_data = queue.LifoQueue()
5-1) LifoQueue 데이터 삽입 및 추출
queue_data.put("queue1")
queue_data.put("queue2")
queue_data.put("queue3")

queue_data.get()
# 출력 화면 : queue3

6. PriorityQueue() 사용
import queue
queue_data = queue.PriorityQueue()
6-1) PriorityQueue() 데이터 삽입 및 추출
import queue

queue_data = queue.PriorityQueue()

queue_data.put(5)
queue_data.put(2)
queue_data.put(10)

queue_data.get()
# 우선순위가 가장 높은(오름차순) 2를 반환
# 출력 화면 : 2
# * 튜플 형식으로 삽입했을때 (튜플의 0번째 인덱스를 우선순위로 여긴다.)
queue_data.put((5,"queue1"))
queue_data.put((1,"queue2"))
queue_data.put((10, "queue3"))

queue_data.get() 
# 우선순위 큐는 우선순위를 오름차순으로 하여 반환함 따라서 1이 들어간 튜플부터 반환.
# 출력 화면 : (1, 'queue2')

# 튜플의 1번째 인덱스 값을 가져오고싶을 때
queue_data.get()[1]
# 위에서 (1, 'queue2') 출력됐으므로 그 다음 우선순위인 5를 가지고있는 튜플을 가져와 그 튜플의 1번째 인덱스 값 반환
# 출력 화면 : queue1

7. list로 queue 다루기(enqueue, dequeue 기능 구현)
queue = [1,2,3,4,5]

def enqueue(data):
    queue.append(data) # .append() 함수를 사용하면 뒤에 데이터를 추가

def dequeue():
    queue.pop(0) # .pop(0) 함수를 이용하여 맨 앞의 데이터를 제거 -> * pop()은 맨 뒤 데이터 제거 괄호안에 맨앞 인덱스인 0 추가해줘야함
	# 또는 del queue[0]으로 써도 된다.
    
enqueue(6) 
print(queue) # 출력 화면 : [1, 2, 3, 4, 5, 6]
dequeue()
print(queue) # 출력 화면 : [2, 3, 4, 5, 6]

 


큐의사용

- 프로세스 스케쥴링 방식 구현

더보기

* 프로세스 스케쥴링(CPU스케쥴링) : 여러 프로세스들 중에서 하나의 프로세스를 선택하여 적절한 CPU에 배치.

프로세스의 CPU 이용을 최대화하여 사용되지않는 CPU를 최소화

* 프로세스들을 스케줄링하기 위해 ‘스케쥴링 큐’ 라고 불리는 3개의 큐를 사용하여 프로세스 관리

 

'자료구조' 카테고리의 다른 글

[자료구조] 스택(Stack)  (0) 2023.03.17
[자료구조] 배열(Array)  (0) 2022.12.13

주피터 노트북 : 웹브라우저에서 파이썬 코드를 작성하고 실행할 수 있는 파이썬 개발 환경 툴

주피터 노트북 설치 방법 : cmd 창에서 설치하는 방법, 아나콘다를 설치하는 방법 이렇게 2가지가 있음.

해당 포스팅에서는 아나콘다 설치 방법으로 진행.

 

1. 아나콘다 다운로드https://www.anaconda.com/products/distribution

 

Anaconda | Anaconda Distribution

Anaconda's open-source Distribution is the easiest way to perform Python/R data science and machine learning on a single machine.

www.anaconda.com

 

초록색 다운로드 버튼 클릭

 

2. 설치 완료 후 파일 실행

Next  클릭

I Agree 클릭

 

대부분의 경우 본인이 이용하므로 just me 선택.

* Next 화면에서 경로에 한글이 포함되어 있다면 다시 Back해서 이 화면으로 돌아와 All Users를 클릭해야한다고 한다.

 

Next 클릭

두번째에 체크박스 선택된 채로 Install 클릭

설치중

Finish

 

3. 시작메뉴에서 Anaconda3 폴더 생성 확인 후 클릭하여 주피터 노트북 실행

 

cmd 창이 켜지고, 웹 브라우저가 열리면서 주피터 노트북 실행 확인 가능

* cmd 창 종료 시, 웹 브라우저도 닫힘

1. 다운로드  https://www.jetbrains.com/ko-kr/pycharm/download/#section=windows

Community쪽 순수 Python개발용인 검정색 다운로드 버튼 클릭 후 다운로드.

 

2. 첨부파일 실행

 

모두 Next 버튼 클릭 후 마지막에 install 클릭하여 설치. 

Finish 클릭

 

3. 파이참 실행하기

 

시작메뉴 클릭 후 설치된 파이참 클릭하여 실행.

New project 클릭 후

New environment using 으로 create

Python IDLE  : 제일 기본, 거의 쓸 일 없다.

 

Jupyter notebook(웹브라우저) : 파이썬 문법 공부 목적에 가장 적합함.

 

Pycharm : 세로 모니터 사용에 적합함.

- 각 데이터를 인덱스에 대응하도록 구성한 데이터 구조

- '파이썬'에서는 '리스트' 타입이 배열 기능을 제공

 

배열의 장점
  • 인덱스로 빠르게 접근 가능
배열의 단점
  • 배열을 구성할 땐 '길이'를 '미리' 설정해야한다는 점때문에 비효율적
  • 새로운 데이터 삽입 시 크기 고정으로 인해 새로운 배열 만들어야함
  • 데이터 중간에 삽입하거나 삭제 시 해당 데이터 뒤에 있는 데이터들의 위치를 이동시켜야함

 

 

'자료구조' 카테고리의 다른 글

[자료구조] 스택(Stack)  (0) 2023.03.17
[자료구조] 큐(queue)  (0) 2023.03.16

+ Recent posts