Esempio n. 1
0
        public V Dequeue()
        {
            //Todo Check Null
            var temp = _head;

            _head = _head.next;
            --_count;
            return(temp.value);
        }
Esempio n. 2
0
        /// <summary>
        /// 比较两个节点的优先级
        /// </summary>
        /// <param name="first">第一个</param>
        /// <param name="second">第二个</param>
        /// <returns>第一个的优先级是否比第二个大</returns>
        private bool ComparePriority(PQNode <P, V> first, PQNode <P, V> second)
        {
            if (first == null && second == null)
            {
                throw new Exception("....");
            }
            if (second == null)
            {
                return(true);
            }
            if (first == null)
            {
                return(false);
            }

            var compareValue = first.priority.CompareTo(second.priority);

            if (compareValue == 1)
            {
                return(true);
            }
            return(false);
        }
Esempio n. 3
0
        public int Count => _count;  //node数量

        public void Enqueue(P priority, V value)
        {
            var newNode = new PQNode <P, V>(priority, value);

            //队列为空
            if (_head == null)
            {
                _head = newNode;
                ++_count;
            }
            //队列不为空
            else
            {
                var temp    = _head; //默认head的优先级最高
                var preTemp = _head; //待比较的前一位
                preTemp = null;
                //! 比较优先级大小,如果没有大于待比较的节点,则后移继续比较
                //! 直到找到优先级较小的,插入到前一位 例如 2-2-2-0,插入1后为2-2-2-(1)-0
                while (!ComparePriority(newNode, temp))
                {
                    preTemp = temp;
                    temp    = temp.next;
                }
                newNode.next = temp;
                //! 判断是否在队头插入
                if (preTemp != null)
                {
                    preTemp.next = newNode;
                }
                else
                {
                    _head = newNode;
                }
                ++_count;
            }
        }
Esempio n. 4
0
 public PQNode(P priority, V value)
 {
     this.priority = priority;
     this.value    = value;
     this.next     = null;
 }