public void Enqueue(object _data, int _priority)
        {
            if (first == null)
            {
                EnqueueFirstItem(_data, _priority);
                return;
            }

            if (_priority > first.priority)
            {
                var newFirstNode = new PQNode(_data, _priority);
                newFirstNode.next = first;
                first             = newFirstNode;
                return;
            }

            var tempNode = first;

            while (tempNode.next != null && _priority < tempNode.next.priority)
            {
                tempNode = tempNode.next;
            }

            var newItem = new PQNode(_data, _priority);

            newItem.next  = tempNode.next;
            tempNode.next = newItem;
        }
        public void Dequeue()
        {
            if (first == null)
            {
                return;
            }

            first = first.next;
        }
 private void EnqueueFirstItem(object _data, int _priority)
 {
     first = new PQNode(_data, _priority);
 }
 public PriorityQueue()
 {
     first = null;
 }
 public PQNode(object _value, int _priority)
 {
     data     = _value;
     priority = _priority;
     next     = null;
 }