예제 #1
0
        public void Insert(Node node, int priority)
        {
            if (node == null)
            {
                return;
            }

            if (HeapContainsNode(node))
            {
                return;
            }

            if (size + 1 == heap.Length)
            {
                DoubleArray();
            }

            PriorityNode n = new PriorityNode(node, priority);

            int hole = ++size;

            heap[0] = n;

            for (; n.priority < heap[hole / 2].priority; hole /= 2)
            {
                heap[hole] = heap[hole / 2];
            }

            heap[hole] = n;
        }
예제 #2
0
        private void DoubleArray()
        {
            PriorityNode[] temp = new PriorityNode[heap.Length * 2];
            for (int i = 1; i < heap.Length; i++)
            {
                temp[i] = heap[i];
            }

            heap = temp;
        }