队列Queue类的实现
public class CQueue
{private ArrayList pqueue;
public CQueue()
{
pqueue = new ArrayList();
}
public void EnQueue(object item)
{
pqueue.Add(item);
}
public void DeQueue()
{
pqueue.RemoveAt(0);
}
public object Peek()
{
return pqueue[0];
}
public void ClearQueue()
{
pqueue.Clear();
}
public int Count()
{
return pqueue.Count;
}
}
队列的一个应用:基数排序
class Program
{
enum DigitType { ones = 1, tens = 10 }
static void DisplayArray(int[] n)
{
for (int x = 0; x <= n.GetUpperBound(0);x++ )
{
Console.Write(n[x] + " ");
}
}
static void RSort(Queue[] que, int[] n, DigitType digit)
{
int snum;
for (int x = 0; x <= n.GetUpperBound(0);x++ )
{
if (digit==DigitType.ones)
{
snum = n[x] % 10;
}
else
{
snum = n[x] / 10;
}
que[snum].Enqueue(n[x]);
}
}
static void BulidArray(Queue[] que, int[] n)
{
int y = 0;
for (int x = 0; x <= 9;x++ )
{
while (que[x].Count>0)
{
n[y] = Int32.Parse(que[x].Dequeue().ToString());
y++;
}
}
}
static void Main(string[] args)
{
Queue[] numQueue = new Queue[10];
int[] nums = new int[] { 91, 46, 85, 15, 92, 35, 31, 22 };
int[] random = new Int32[99];
for (int i = 0; i < 10;i++ )
{
numQueue[i] = new Queue();
}
RSort(numQueue, nums, DigitType.ones);
BulidArray(numQueue,nums);
Console.WriteLine();
Console.WriteLine("First pass results:");
DisplayArray(nums);
RSort(numQueue, nums, DigitType.tens);
BulidArray(numQueue, nums);
Console.WriteLine();
Console.WriteLine("Second pass results:");
DisplayArray(nums);
Console.WriteLine();
}
优先队列:
public struct pqItem
{
public int priority;
public string name;
}
public class PQueue : Queue
{
public PQueue()
{
}
public override object Dequeue()
{
object[] items;
int min;
items = this.ToArray();
min = ((pqItem)items[0]).priority;
for (int x = 1; x <= items.GetUpperBound(0);x++ )
{
if (((pqItem)items[x]).priority<min)
{
min = ((pqItem)items[x]).priority;
}
}
this.Clear();
int x2;
for (x2 = 0; x2 <= items.GetUpperBound(0);x2++ )
{
if (((pqItem)items[x2]).priority==min&&((pqItem)items[x2]).name!=" ")
{
this.Enqueue(items[x2]);
}
}
return base.Dequeue();
}
}