黑马程序员_队列的学习

来源:互联网 发布:业余程序员该如何赚钱 编辑:程序博客网 时间:2024/06/05 16:49
/*    队列的学习 * 队列是一种将数据从表的末端放入,并在表的前端移除的数据结构。按照数据进入的顺序来存储。(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();        }    }}

0 0
原创粉丝点击