사진과 음악을 좋아하는 개발자 지망생의 블로그

큐 level 3 (우선순위 큐, Priority Queue) 본문

CS/자료구조 & 알고리즘

큐 level 3 (우선순위 큐, Priority Queue)

devculture309 2023. 4. 12. 14:43
반응형

1) 우선순위 큐

  - 큐(Queue)가 FIFO(선입선출) 방식을 따르지 않고 원소들의 갖고 있는 우선순위에 따라 나오는 자료구조

  - 대표적인 예로 '운영체제의 CPU 스케쥴러'가 있다

  - 우선순위 큐는 두가지 방식으로 구현 가능하다

  • Enqueue 시 우선순위를 유지하도록 한다
  • Dequeue 시 우선순위가 높은 것을 선택하도록 한다

      → 위 두가지 방식 중 'Enqueue 시 우선순위를 유지' 가 미세하게 유리하다. 왜냐하면 Dequeue 시 우선순위가 높은 것을 선택하도록 할 경우 모든 데이터에 대하여 다 살펴봐야하기 때문에 큐의 길이가 길어질 경우 시간적으로 불리하다. 

 

  - 우선순위 큐는 선형 배열(Array, list)과 연결 리스트(linked list)를 이용하여 구현 가능하다

      → 시간 소요 측면에서 삽입 및 삭제 연산을 유연하게 사용가능한 연결 리스트가 유리하나 메모리 사용 측면에서 선형 배열이 더 유리하다. 하지만, 설계시 보통 시간적으로 유리한 것이 우선시 된다

 

2) 연결 리스트(Doubly Linked List)를 이용한 Queue 자료구조 및 연산 구현

 

class PriorityQueue:
    def __init__(self):
        self.queue = DoublyLinkedList()  # 양방향 연결 리스트를 이용하여 빈 큐 초기화

    def size(self):
        return self.queue.getLength()

    def isEmpty(self):
        return self.size() == 0

    def enqueue(self, x):
        newNode = Node(x)  
        curr = self.queue.head  
        while curr.next != self.queue.tail and x < curr.next.data:
            curr = curr.next  
        self.queue.insertAfter(curr, newNode)  

    def dequeue(self):
        return self.queue.popAt(self.queue.getLength())
      
    def peek(self):
        return self.queue.getAt(self.queue.getLength()).data
반응형

'CS > 자료구조 & 알고리즘' 카테고리의 다른 글

트리 level 2 (이진 트리, Binary Tree)  (0) 2023.04.14
트리 level 1 (트리 기본, just Tree...)  (0) 2023.04.13
큐 level 2 (환형 큐, Circular Queue)  (0) 2023.04.12
큐(Queue) level 1  (0) 2023.04.12
스택(Stack)  (0) 2023.04.11