IPriorityQueue.cs 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. using System;
  2. using System.Collections.Generic;
  3. namespace IFramework.Queue
  4. {
  5. /// <summary>
  6. /// 优先级队列接口
  7. /// </summary>
  8. /// <typeparam name="TItem">队列元素</typeparam>
  9. /// <typeparam name="TPriority">紧急程度</typeparam>
  10. public interface IPriorityQueue<TItem, in TPriority> : IEnumerable<TItem> where TPriority : IComparable<TPriority>
  11. {
  12. /// <summary>
  13. /// 将优先级节点入队,优先级值小的将会排在队列前面(越小越紧急)
  14. /// </summary>
  15. void Enqueue(TItem node, TPriority priority);
  16. /// <summary>
  17. /// 将队列的第一个元素从队列中出队
  18. /// </summary>
  19. TItem Dequeue();
  20. /// <summary>
  21. /// 清除队列里的所有元素
  22. /// </summary>
  23. void Clear();
  24. /// <summary>
  25. /// 判断队列中是否包含所给元素
  26. /// </summary>
  27. /// <param name="node">需要判断是否包含的元素</param>
  28. /// <returns>如果包含则返回true,否则返回false</returns>
  29. bool Contains(TItem node);
  30. /// <summary>
  31. /// 在队列中移除匹配的第一个的所给元素
  32. /// </summary>
  33. void Remove(TItem node);
  34. /// <summary>
  35. /// 更新节点元素的优先程度
  36. /// </summary>
  37. void UpdatePriority(TItem node, TPriority priority);
  38. /// <summary>
  39. /// 队列的第一个元素
  40. /// </summary>
  41. TItem first { get; }
  42. /// <summary>
  43. /// 元素数量
  44. /// </summary>
  45. int count { get; }
  46. }
  47. }