Programming/자료구조

Queue(큐) - python3

Chanho. 2020. 2. 25. 21:26
반응형

 

구조

  • 먼저 들어간 데이터가 먼저 나오는 선입선출 자료구조를 라고 한다.
    1. 예를 들어 먼저 줄을 선 사람이 먼저 물건을 사고 나오는 것과 같다 
    2. FIFO(First-In, First-Out) 방식으로 스택(Stack)과 반대

용어

  • put(insert) : 큐에 자료를 넣는 것
  • get(delete) : 큐에서 자료를 꺼내는 것
  • front(head) : 데이터를 get할 수 있는 위치를 가리킴
  • rear(tail) : 데이터를 put할 수 있는 위치를 가리킴

 

=> 오버플로우(Overflow), 언더플로우(Underflow)

  • 오버플로우 : 큐가 꽉 차있는 상태에서 데이터가 들어오면 오버플로우 발생 ( put을 할 수 없는 상태 )
  • 언더플로우 : 오버플로우의 반대되는 개념으로 큐가 비어있을때 get을 하게되면 언더플로우 발생

 

대표적으로 큐가 쓰이는

  • 멀티태스킹을 위한 프로세스 스케줄링 방식을 구현하기 위해서 많이 사용되어짐

 

다양한 Queue 방식

  • FIFO (First-In, First-Out) : 선입선출로 먼저 들어온 데이터가 가장 먼저 나감
  • LIFO (Last-In, First-Out) : 후입선출로 가장 마지막에 들어온 데이터가 먼저 나감
  • PriorityQueue (우선순위 부여되는 큐) : 우선순위가 높은 순으로 데이터가 먼저 나감

실습 : python3 , jupyter notebook


FIFO (First-In, First-Out)


LIFO (Last-In, First-Out)


PriorityQueue ( 우선순위 부여 )


 

Queue - python으로 직접 FIFO 구현해보기

q_list = list()

def put(data):
    q_list.append(data)
    print(f"현재 queue : {q_list}\n")

def get():   
    if len(q_list) > 0:
        print(f"get한 데이터 값 : {q_list[0]}")
        del q_list[0]
        return q_list
    else:
        return "Underflow"   
        
while(1):
    select = input("1. put ||  2. get : ")

    if select == '1':
        number = input("(put)데이터 입력 : ")
        put(number)
    elif select == '2':
        print(f"현재 queue : {get()}\n")
    else:
        print("exit")
        break;

결과