implement Priority Queue with heap