[Data Structure] Queue

Fraise_KIM·2023년 7월 10일
0

Queue란?

  • FIFO : First in, First out

    • 가장 먼저 넣은 데이터를 가장 먼저 꺼낼 수 있는 구조

    • ex) 가장 먼저 줄 선 사람이 가장 먼저 입장

    • 스택(LILO)와 반대


  • 용어
    • Enqueue : 큐에 데이터를 넣기

    • Dequeue : 큐에서 데이터 꺼내기

      # 리스트로 큐의 enqueue, dequeue 구현
      
      queue_list = list()
      
      def enqueue(data):
          queue_list.append(data)
      
      def dequeue():
          data = queue_list[0]
          del queue_list[0]
          return data
      
      for i in range(10):
          enqueue(i)
      
      dequeue()



파이썬 Queue 라이브러리

  • 파이썬에서는 큐 자료구조로 Queue(), LifoQueue(), PriorityQueue()를 제공한다.

    • Queue() : 일반적인 큐

    • LifoQueue() : Last in, First out (=stack)

    • PriorityQueue() : 데이터마다 우선순위를 넣어, 해당 기준에서 높은 순으로 데이터를 출력한다.


  • Queue()

    # Queue()로 큐 만들기
    import queue
    
    queue1 = queue.Queue()
    
    # 큐에 데이터 넣기
    queue1.put("ruffy")
    queue1.put(1)
    
    # 큐의 사이즈 확인
    queue1.qsize()  # 출력 : 2
    
    # 큐의 데이터 가져오기 (0번 인덱스 가져오고 지워짐)
    queue1.get()    # 출력 : ruffy
  • LifoQueue()
    # LifoQueue()
    import queue
    queue2 = queue.LifoQueue()
    
    # Lifo 큐에 데이터 넣기
    queue2.put("Robin")
    queue2.put(52)
    
    # Lifo 큐의 사이즈 확인
    queue2.qsize()  # 출력 : 2
    
    # Lifo 큐의 데이터 가져오기 (마지막 인덱스 가져오고 지워짐)
    queue2.get()    # 출력 : 52
  • PriortiyQueue()
    import queue
    queue3 = queue.PriorityQueue()
    
    # Priortiy 큐에 데이터 넣기 : (우선순위, 데이터), 튜플 형식
    # 우선순위가 높을 수록 숫자가 작음
    queue3.put((1, "strawberry"))
    queue3.put((10, "banana"))
    queue3.put((5, "peach"))
    
    # Priortiy 큐의 사이즈 확인
    queue3.qsize()  # 출력 : 3
    
    # Priortiy 큐에 데이터 넣기 
    queue3.get()    # 출력 : (1, 'strawberry')

큐의 활용

  • 멀티 테스킹을 위한 프로세스 스케줄링 방식

📌 자료 구조 연습
https://visualgo.net/en/list

0개의 댓글