知识大全 简述用C#实现优先队列方法

Posted

篇首语:立志宜思真品格,读书须尽苦功夫。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 简述用C#实现优先队列方法相关的知识,希望对你有一定的参考价值。

简述用C#实现优先队列方法  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

  优先队列(priority queue) 是很重要的数据结构 我在做 ACM 题时就经常要用到她 C++ STL 就包括 priority_queue Java 也有 PriorityQueue 类 遗憾的是 NET Framework Base Class Library 中并不包括优先队列 于是 我只好自己用 C# 语言写一个 如下所示

using System;using System Collections Generic;

namespace Skyiv Util class PriorityQueue<T>   IComparer<T> parer;  T[] heap;

  public int Count  get; private set; 

  public PriorityQueue() : this(null)    public PriorityQueue(int capacity) : this(capacity  null)    public PriorityQueue(IComparer<T> parer) : this(  parer)  

  public PriorityQueue(int capacity  IComparer<T> parer)     this parer = (parer == null) ? Comparer<T> Default : parer;   this heap = new T[capacity];  

  public void Push(T v)     if (Count >= heap Length) Array Resize(ref heap  Count *  );   heap[Count] = v;   SiftUp(Count++);  

  public T Pop()     var v = Top();   heap[ ] = heap[ Count];   if (Count >  ) SiftDown( );   return v;  

  public T Top()     if (Count >  ) return heap[ ];   throw new InvalidOperationException( 优先队列为空 );  

  void SiftUp(int n)     var v = heap[n];   for (var n  = n /  ; n >   && parer Compare(v  heap[n ]) >  ; n = n  n  /=  ) heap[n] = heap[n ];   heap[n] = v;  

  void SiftDown(int n)     var v = heap[n];   for (var n  = n *  ; n  < Count; n = n  n  *=  )       if (n  +   < Count && parer Compare(heap[n  +  ]  heap[n ]) >  ) n ++;    if (parer Compare(v  heap[n ]) >=  ) break;    heap[n] = heap[n ];      heap[n] = v;   

  如上所示 这个

PriorityQueue<T>

  泛型类提供四个公共构造函数 第一个是无参的构造函数 其余的构造函数允许指定优先队列中包括的初始元素数(capacity) 如何对键进行比较(parer)

  这个程序使用堆(heap)来实现优先队列 所以 所需的空间是最小的 Count 属性和 Top 方法的时间复杂度是 O( ) Push 和 Pop 方法的时间复杂度都是 O(logN)

cha138/Article/program/net/201311/15388

相关参考

知识大全 用 C# 实现带键值的优先队列[1]

用C#实现带键值的优先队列[1]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  首先需要一个接口

知识大全 C#操作消息队列的代码

C#操作消息队列的代码  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  这是一个关于C#操作消息队

买卖队列的内容

买卖队列的内容按照价格优先、时间优先的交易规则,买方队列是委托价格从高到低的排序,如果委托价格相同,则委托时间在先的排序就在先;卖方队列则是是委托价格从低到高的排序,同样地,如果委托价格相同,则委托时

知识大全 使用微软消息队列实现C#进程间通信

使用微软消息队列实现C#进程间通信  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  顾名思义微软消

知识大全 浅析C#语言实现堆和队列数据结构

浅析C#语言实现堆和队列数据结构  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  1线性聚集基础 

知识大全 数据结构考研分类复习真题 第三章 栈和队列[14]

  算术表达式求值的流程其中OPTR为算术符栈OPND为操作数栈precede(operoper)是比较运算符优先级别的函数operate(opndoperopnd)为两操作数的运算结果函数(#表示运

知识大全 数据结构考研分类复习真题 第三章 栈和队列[20]

  利用两个栈sls模拟一个队列时如何用栈的运算实现队列的插入删除以及判队空运算请简述这些运算的算法思想【北京邮电大学 一】【东南大学一(分)】  .一个循环队列的数据结构描述如下【西北工业

知识大全 用VB实现队列播放MP3

用VB实现队列播放MP3  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  队列播放MP就是在文件列

知识大全 栈和队列 - 队列 - 顺序队列

  顺序队列  顺序队列  ()顺序队列的定义  队列的顺序存储结构称为顺序队列顺序队列实际上是运算受限的顺序表  ()顺序队列的表示  ①和顺序表一样顺序队列用一个向量空间来存放当前队列中的元素  

知识大全 顺序队列

顺序队列顺序队列 ()顺序队列的定义  队列的顺序存储结构称为顺序队列顺序队列实际上是运算受限的顺序表()顺序队列的表示  ①和顺序表一样顺序队列用一个向量空间来存放当前队列中的元