class PriorityQueue:
    A          # 儲存佇列元素的陣列
    heapSize   # 實際上有儲存資料的堆積大小

    insert(x):
        A[heapSize++] ← x  # 插入元素
        upHeap(heapSize-1)      # 進行 Up Heap

    top():
        return A[0]

    extract():
        val ← A[0]
        A[0] ← A[heapSize-1]
        heapSize--
        downHeap(0)     # 進行 Down Heap
        return val

    upHeap(i): # 以插入方式實作
        val ← A[i]

        while True:
            if  i ≤ 0: break
            if A[parent(i)] ≥ val: break
            A[i] ← A[parent(i)]
            i ← parent(i)
        
        A[i] ← val

    downHeap(i): # 以插入方式實作
        largest ← i
        val = A[i]

        while True:
            if left(i) < heapSize and right(i) < heapSize:
                if A[left(i)] > A[right(i)] ):
                    largest ← left(i)
                else:
                    largest ← right(i)
            else if left(i) < heapSize:
                largest ← left(i)
            else if right(i) < heapSize:
                largest ← right(i)
            else:
                largest ← NIL

            if largest = NIL : break
            if A[largest] ≤ val: break
      
            A[i] ← A[largest]
            i ← largest

        A[i] ← val