public T Dequeue() { PriorityQueueNode <T> node = prQueue.OrderBy(item => item.Priority).First(); prQueue.Remove(node); return(node.Item); }
private void BubbleUp(PriorityQueueNode <T> node) { values.Add(node); int currentIndex = values.Count - 1; if (currentIndex <= 0) { return; } while (true) { int parentIndex = (int)Math.Floor((currentIndex - 1) / 2m); if (parentIndex < 0) { return; } var parent = values[parentIndex]; if (parent.Priority.CompareTo(node.Priority) > 0) { values[currentIndex] = parent; values[parentIndex] = node; currentIndex = parentIndex; } else { return; } } }
private void Swap(int firstIndex, int secondIndex) { PriorityQueueNode <T> tmp = values[firstIndex]; values[firstIndex] = values[secondIndex]; values[secondIndex] = tmp; }
static void Main(string[] args) { PriorityQueueNode pq = new PriorityQueueNode(); //Node node = pq.newNode(4, 5); pq.enqueue(5, 2); pq.enqueue(6, 3); pq.enqueue(7, 4); pq.enqueue(700, 1); pq.enqueue(700111, 0); //pq.size(); //Console.WriteLine("\n"); /*pq.print(); * Console.WriteLine("\n" + pq.peek() + " peek"); * pq.dequeue(); * pq.print(); * * Console.WriteLine("\n" + pq.peek() + " peek"); * pq.dequeue(); * pq.print(); * * * Console.WriteLine(pq.contain(4));*/ //pq.size(); //pq.print(); pq.print(); pq.reveserAll(); pq.print(); //pq.size(); //pq.print(); // Console.WriteLine(pq.peek()); Console.ReadLine(); }
public void Enqueue(T value, T priority) { var node = new PriorityQueueNode <T>(value, priority); BubbleUp(node); }
public int CompareTo(PriorityQueueNode <T> other) { return(Priority.CompareTo(other.Priority)); }