본문 바로가기
Data Science & AI/Algorithm

[Algorithm] 자료구조와 알고리즘 - 2. 자료구조 - 큐(Queue)

by skwkiix 2023. 9. 6.
728x90

이 포스팅은 <파이썬 자료구조와 알고리즘 for beginner>를  학습하면서 정리한 내용이다.

https://www.yes24.com/Product/Goods/97142842

 

파이썬 자료구조와 알고리즘 for Beginner - 예스24

파이썬으로 구현하며 다지는논리적 사고를 위한 기초 체력기본 자료구조와 알고리즘을 쉽게 풀어낸 입문서입니다. 기본 → 간단 구현 → 일반 구현 → 응용 순으로 체계적으로 학습할 수 있습

www.yes24.com

 

큐(Queue)

양쪽이 뚫린 파이프

큐의 특징

  • 입구와 출구가 다르다.

파이썬 자료구조와 알고리즘 for beginner

원리

  •  enQueue : 삽입
  • deQueue : 추출
  • front : 첫번째 데이터 (front = -1 > 큐가 비었다는 뜻)
  • rear :  마지막 데이터

01. 단순 코드 구현


## 함수


## 변수
SIZE = 5
queue = [None for _ in range(SIZE)]
front = rear = -1 # 큐 초기화

##메인
# 삽입(enQueue)
rear += 1
queue[rear] = '화사'

rear += 1
queue[rear] = '솔라'

rear += 1
queue[rear] = '문별'
print('출구 < --',queue,' < --- 입구')

# 추출 deQueue()
front += 1
data = queue[front]
queue[front]= None
print('식사손님 :', data)
front += 1
data = queue[front]
queue[front]= None
print('식사손님 :', data)
front += 1
data = queue[front]
queue[front]= None
print('식사손님 :', data)
print('출구<--', queue, '<--입구')
출구 < -- ['화사', '솔라', '문별', None, None]  < --- 입구
식사손님 : 화사
식사손님 : 솔라
식사손님 : 문별

02. 큐 구조를 이용한 코드 구현


삽입의 원리(enQueue)

  • rear를 하나 증가시키고 삽입
  • 큐가 꽉찾는지 확인하는 함수 필요 isQueueFull()

 

추출의 원리(deQueue)

  • front를 하나 증가시키고 추출
  • 큐가 비어있는지 학인하는 함수 필요 isQueueEmpty()
    • front == rear 이면, 큐가 비어있다는 뜻
  • 위치 데이터 확인 필요 peek()
    • 추출될 데이터를 큐에 그대로 두고 확인

 

## 함수
def isQueueFull() :
    global SIZE, queue, front, rear
    if(rear >= SIZE-1) :
        return True
    else :
        return False

def enQueue(data) :
    global SIZE, queue, front, rear
    if (isQueueFull()) :
        print('큐 꽉!')
        return
    rear += 1
    queue[rear] = data

def isQueueEmpty() :
    global SIZE, queue, front, rear
    if (front == rear) :
        return True
    else :
        return False

def deQueue() :
    global SIZE, queue, front, rear
    if (isQueueEmpty()) :
        print('큐 텅~')
        return
    front += 1
    data = queue[front]
    queue[front] = None
    return data

def peek() :
    global SIZE, queue, front, rear
    if (isQueueEmpty()) :
        print('큐 텅~')
        return
    return queue[front+1]

## 변수
SIZE = 5
queue = [None for _ in range(SIZE)]
front = rear = -1

## 메인
enQueue('화사')
enQueue('솔라')
# enQueue('문별')
# enQueue('휘인')
# enQueue('선미')
# print('출구<--', queue, '<--입구')
# enQueue('재남')
print('출구<--', queue, '<--입구')

retData = deQueue()
print('손님 이리로 :', retData)

print('준비하세요 ==>', peek())

retData = deQueue()
print('손님 이리로 :', retData)
print('출구<--', queue, '<--입구')

retData = deQueue()
print('손님 이리로 :', retData)
출구<-- ['화사', '솔라', None, None, None] <--입구
손님 이리로 : 화사
준비하세요 ==> 솔라
손님 이리로 : 솔라
출구<-- [None, None, None, None, None] <--입구
큐 텅~
손님 이리로 : None

 

728x90