黑马程序员_队列的学习
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(); } } }
相关文章推荐
- 【黑马程序员-学习笔记】数据结构-栈与队列
- 黑马程序员---学习多态
- 黑马程序员--Java学习13--抽象与接口
- 黑马程序员——Java基础学习笔记(五)
- 黑马程序员:各学科学习路线图,简直是厉害了word哥
- 黑马程序员-JAVA学习之选择排序
- 数据结构学习笔记----循环队列
- 黑马程序员——OC学习总结1-5
- python 学习笔记九之队列,异步IO,数据库
- 黑马程序员--JQuery学习笔记
- 黑马程序员--学习笔记(IO流一)
- 黑马程序员—java基础学习--网络编程
- 黑马程序员 Java学习笔记 (day11)
- linux 系统编程-学习笔记10--进程间通信--管道/FIFO/消息队列/
- 黑马程序员之C#学习笔记:类与结构的区别
- 黑马程序员——学习笔记补充-对象的序列化
- 数据结构——循环队列的学习
- 黑马程序员-sql学习001
- 黑马程序员_学习日记83_812图书商城项目小结
- 数据结构的学习之路(二)-- 栈与队列