您的位置:首页 > 职场人生

黑马程序员_队列的学习

2014-01-09 23:30 92 查看
/*
队列的学习
* 队列是一种将数据从表的末端放入,并在表的前端移除的数据结构。按照数据进入的顺序来存储。(FIFO First In First Out)
* 添加新项被称为Enqueue,而从队列中移除数据项的操作则被称为Dequeue
* 查看起始数据 Peek()方法
* 队列默认的容量为32个数据项,同Stack一样 当数据项超过当前的最大容量后,容量会自动的翻倍
* 也可以指定增长的倍数 Queue q=new Queue(32,3);//指定增长默认初始量的3倍
*/
namespace MyQueue
{
class Program
{
static void Main(string[] args)
{
Queue qq = new Queue();

pqItem[] pq = new pqItem[3];
pq[0].name = "a";
pq[0].priority = 1;
pq[0].name = "b";
pq[0].priority = 0;
pq[2].name = "c";
pq[2].priority = 3;
for (int i = 0; i <= pq.GetUpperBound(0); i++)
{
qq.Enqueue(pq[i]);//把数据项放入队列
}
pqItem nextPatient;
nextPatient = (pqItem)qq.Dequeue();//移除队列
Console.WriteLine(nextPatient.name);
Console.ReadKey();
}
}
/// <summary>
/// Queue 的实现
/// </summary>
public class CQueue
{
private ArrayList arrQueue;

public CQueue()
{
arrQueue = new ArrayList();
}
/// <summary>
///  进队列
/// </summary>
/// <param name="item"></param>
public void EnQueue(object item)
{
arrQueue.Add(item);
}
/// <summary>
/// 出队列
/// </summary>
public void DeQueue()
{
arrQueue.RemoveAt(0);//其实数据
}

/// <summary>
/// 查看起始数据项
/// </summary>
/// <returns></returns>
public object Peek()
{
return arrQueue[0];
}
/// <summary>
/// 清除队列中的所有数据项
/// </summary>
public void Clear()
{
arrQueue.Clear();
}

/// <summary>
/// 获取当前队列中的数据项数量
/// </summary>
/// <returns></returns>
public int Count()
{
return arrQueue.Count;
}

}

public struct pqItem
{
public int priority;//数据项的优先级
public string name;//数据项的名称
}

/// <summary>
/// 定义一个Queue的子类 此处为了实现对DeQueue的重写,以实现根据优先级出队列的功能
/// </summary>
public class PQueue : Queue
{
public PQueue()
{

}
/// <summary>
/// 重写出队列的方法 实现根据优先级出队列
/// </summary>
/// <returns></returns>
public override object Dequeue()
{
object[] items;
int min;//获取优先级最大 数值最小的数据项的数值
items = this.ToArray();//获取当前队列的数据项
min = ((pqItem)items[0]).priority;//获取首个数据项的优先级 并作
for (int i = 1; i <= items.GetUpperBound(0); i++)
{
if (((pqItem)items[i]).priority < min)
{
min = ((pqItem)items[i]).priority;
}
}
this.Clear();//从Queue中移除所有的对象
int i2;
for (i2 = 0; i2 <= items.GetUpperBound(0); i2++)
{
if (((pqItem)items[i2]).priority == min && ((pqItem)items[i2]).name != "")
{
this.Enqueue(items[i2]);
}
}
return base.Dequeue();
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: