文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>可自动增长队列长度的泛型循环队列

可自动增长队列长度的泛型循环队列

时间:2011-03-01  来源:不惜

队列代码:

 /// <summary>
    /// 一个可以自动增长长度的队列,并且可以重复循环队列
    /// </summary>
    /// <typeparam name="T">自定义的泛型</typeparam>
    class Queue  <T>
    {   //队列出队index     
        int front;
        //队列入队Index
        int back;
        //队列中元素数量
        int size;
        //队列的初始长度设置为3
        T[] data=new T [3] ;
        //获取队列中的元素数量
        public int QueueSize
        {
            get { return size; }
        }
        /// <summary>
        /// 元素出队
        /// </summary>
        /// <returns></returns>
        public T DeQueue()
        {
            T t =default(T );
            if (size != 0)
            {
                SetFrontToZero();               
                t = data[front];
                data[front] = default(T);
                front++;
                size--;
             

            }
            return t;
        }
        /// <summary>
        /// 元素入队
        /// </summary>
        /// <param name="t"></param>
        public void EnQueue(T t)
        {

            AddQueueSize();
            SetBackToZero();
           
            data[back] = t;
            back++;      
            size++;

        }
        //队列自增长
        private  void AddQueueSize()
        {
            if (size >= data.Length)
            {
                back = size;
                T[] newData = new T[data.Length * 2];

                for (int i = 0; i < data.Length; i++)
                {
                    newData[i] = DeQueue();

                }
                data = newData;

                size = back;
                front = 0;
            }
        }
         /// <summary>
         /// 设置出队index
         /// </summary>
        private void SetBackToZero()
        {
            if (back == data.Length&&size <data .Length )
            {
                back = 0;
            }
        }
        /// <summary>
        /// 设这出队Index
        /// </summary>
        private void SetFrontToZero()
        {
            if (front  == data.Length && size !=0)
            {
                front = 0;
            }
        }

    }
  测试用到的泛型数据: View Code /// <summary>
    /// 个人成绩结构体
    /// </summary>
    class SocreMode : IComparable,ICloneable 
    {
        public string mFileName = "";
        public string mMail = "";
        public string mName = "";
        public int mSocre;
        public string FileName
        {
            get
            {
                return mFileName;
            }
            set
            {
                mFileName = value;
            }
        }
        public string Mail
        {
            get
            {
                return mMail;
            }
            set { mMail = value; }

        }
        public string Name
        {
            get { return mName; }
            set { mName = value; }

        }
        public int  Socre
        {
            get { return mSocre; }
            set { mSocre = value; }
        }
        /// <summary>
        /// 实现IComparable接口
        /// </summary>
        /// <param name="obj">SocreMode对象</param>
        /// <returns></returns>
        int IComparable.CompareTo(object obj)
        {
            SocreMode temp = (SocreMode)obj;
            if (temp.mName == mName)
            {
                return this.mMail.CompareTo(temp.mMail);

            }
            else
            {
                return this.mName.CompareTo(temp.Name);
            }
        }
        /// <summary>
        ///  重载ToString 方法
        /// </summary>
        /// <returns></returns>
        public override string ToString()
        {
            return string.Format(mMail.PadRight(30) + "\t" + mName.PadRight(15 - (System.Text.Encoding.Default.GetByteCount(mName) - mName.Length)) + "\t" + mSocre.ToString());
        }
        public object Clone()
        {
            SocreMode temp = new SocreMode();
            temp.mSocre = this.mSocre;
            return temp;

        }
    }

测试代码:

 

  class Program
    {
        static void Main(string[] args)
        {
            int len;
            int lens = 0;
                int lCount=30;
                Queue<SocreMode> lQueue = new Queue<SocreMode>();
                SocreMode lSocreMode = new SocreMode();
                Console.WriteLine(" 一次入队3个元素,出队三个元素  ");
                for (int i = 0; i < lCount; i++)
                {
                    len = 3;
                    SocreMode tmpSocreMode =(SocreMode) lSocreMode.Clone();
                    tmpSocreMode.Socre = tmpSocreMode.Socre + i;
                    lQueue.EnQueue(tmpSocreMode);
                    tmpSocreMode = (SocreMode)lSocreMode.Clone();
                    tmpSocreMode.Socre = tmpSocreMode.Socre + i;
                    lQueue.EnQueue(tmpSocreMode);
                    tmpSocreMode = (SocreMode)lSocreMode.Clone();
                    tmpSocreMode.Socre = tmpSocreMode.Socre + i;
                    lQueue.EnQueue(tmpSocreMode);
                    int one = lQueue.DeQueue().Socre;
                    int two = lQueue.DeQueue().Socre;
                    int three = lQueue.DeQueue().Socre;
                    Console.Write( one.ToString () +two.ToString () +three .ToString ());
                   
                }
                Console.WriteLine("\n////////////////////////////////////");
                Console.WriteLine(" 一次入队2个元素,出队1个元素  ");
                len = 0;
                lens = 2;
                for (int i = 0; i < lCount; i++)
                {
                    len++;
                    SocreMode tmpSocreMode = (SocreMode)lSocreMode.Clone();
                    tmpSocreMode.Socre = tmpSocreMode.Socre + i;
                    lQueue.EnQueue(tmpSocreMode);
                    tmpSocreMode = (SocreMode)lSocreMode.Clone();
                    tmpSocreMode.Socre = tmpSocreMode.Socre + i;
                    lQueue.EnQueue(tmpSocreMode);
                    int one = lQueue.DeQueue().Socre;
                  
                    Console.Write(one.ToString() );
                    if (len == lens)
                    {
                        Console.Write("\n");
                        len = 0;
                    }

                }
                while (lQueue.QueueSize != 0)
                {
                    len++;
                    //lQueue.EnQueue(tmpSocreMode);
                    int one = lQueue.DeQueue().Socre;
                    Console.Write(one.ToString());
                    if (len == lens)
                    {
                        Console.Write("\n");
                        len = 0;
                    }
                }
                Console.WriteLine("\n////////////////////////////////////");
                Console.WriteLine(" 一次入队4个元素,出队2个元素  ");
                len = 0;
                lens = 4;
                for (int i = 0; i < lCount; i++)
                {
                    len++;
                    SocreMode tmpSocreMode = (SocreMode)lSocreMode.Clone();
                    tmpSocreMode.Socre = tmpSocreMode.Socre + i;
                    lQueue.EnQueue(tmpSocreMode);
                    tmpSocreMode = (SocreMode)lSocreMode.Clone();
                    tmpSocreMode.Socre = tmpSocreMode.Socre + i;
                    lQueue.EnQueue(tmpSocreMode);
                    tmpSocreMode = (SocreMode)lSocreMode.Clone();
                    tmpSocreMode.Socre = tmpSocreMode.Socre + i;
                    lQueue.EnQueue(tmpSocreMode);
                    tmpSocreMode = (SocreMode)lSocreMode.Clone();
                    tmpSocreMode.Socre = tmpSocreMode.Socre + i;
                    lQueue.EnQueue(tmpSocreMode);
                    int one = lQueue.DeQueue().Socre;
                    int two = lQueue.DeQueue().Socre;
                    //int three = lQueue.DeQueue().Socre;
                    Console.Write(one.ToString() + two.ToString() );
                    if (len == lens)
                    {
                        Console.Write("\n");
                        len = 0;
                    }

                }
                while (lQueue.QueueSize != 0)
                {
                    len++;
                    //lQueue.EnQueue(tmpSocreMode);
                    int one = lQueue.DeQueue().Socre;
                    Console.Write(one.ToString());
                    if (len == lens)
                    {
                        Console.Write("\n");
                        len = 0;
                    }
                }
                Console.WriteLine("\n////////////////////////////////////");
                Console.WriteLine(" 一次入队4个元素,出队2个元素  ");
                len = 0;
                lens = 5;
                for (int i = 0; i < lCount; i++)
                {
                    len++;
                    SocreMode tmpSocreMode = (SocreMode)lSocreMode.Clone();
                    tmpSocreMode.Socre = tmpSocreMode.Socre + i;
                    lQueue.EnQueue(tmpSocreMode);
                    tmpSocreMode = (SocreMode)lSocreMode.Clone();
                    tmpSocreMode.Socre = tmpSocreMode.Socre + i;
                    lQueue.EnQueue(tmpSocreMode);
                    tmpSocreMode = (SocreMode)lSocreMode.Clone();
                    tmpSocreMode.Socre = tmpSocreMode.Socre + i;
                    lQueue.EnQueue(tmpSocreMode);
                    tmpSocreMode = (SocreMode)lSocreMode.Clone();
                    tmpSocreMode.Socre = tmpSocreMode.Socre + i;
                    lQueue.EnQueue(tmpSocreMode);
                    tmpSocreMode = (SocreMode)lSocreMode.Clone();
                    tmpSocreMode.Socre = tmpSocreMode.Socre + i;
                    lQueue.EnQueue(tmpSocreMode);
                    int one = lQueue.DeQueue().Socre;
                    int two = lQueue.DeQueue().Socre;
                    //int three = lQueue.DeQueue().Socre;
                    Console.Write(one.ToString() + two.ToString());
                    if (len == lens)
                    {
                        Console.Write("\n");
                        len = 0;
                    }

                }
                while (lQueue.QueueSize != 0)
                {
                    len++;
                    //lQueue.EnQueue(tmpSocreMode);
                    int one = lQueue.DeQueue().Socre;
                    Console.Write(one.ToString());
                    if (len == lens)
                    {
                        Console.Write("\n");
                        len = 0;
                    }
                }
                Console.WriteLine("\n////////////////////////////////////");
                Console.WriteLine(" 一次入队7个元素,出队2个元素  ");
                len = 0;
                lens = 7;
                for (int i = 0; i < lCount; i++)
                {
                    len++;
                    SocreMode tmpSocreMode = (SocreMode)lSocreMode.Clone();
                    tmpSocreMode.Socre = tmpSocreMode.Socre + i;
                    lQueue.EnQueue(tmpSocreMode);
                    tmpSocreMode = (SocreMode)lSocreMode.Clone();
                    tmpSocreMode.Socre = tmpSocreMode.Socre + i;
                    lQueue.EnQueue(tmpSocreMode);
                    tmpSocreMode = (SocreMode)lSocreMode.Clone();
                    tmpSocreMode.Socre = tmpSocreMode.Socre + i;
                    lQueue.EnQueue(tmpSocreMode);
                    tmpSocreMode = (SocreMode)lSocreMode.Clone();
                    tmpSocreMode.Socre = tmpSocreMode.Socre + i;
                    lQueue.EnQueue(tmpSocreMode);
                    tmpSocreMode = (SocreMode)lSocreMode.Clone();
                    tmpSocreMode.Socre = tmpSocreMode.Socre + i;
                    lQueue.EnQueue(tmpSocreMode);
                    tmpSocreMode = (SocreMode)lSocreMode.Clone();
                    tmpSocreMode.Socre = tmpSocreMode.Socre + i;
                    lQueue.EnQueue(tmpSocreMode);
                    tmpSocreMode = (SocreMode)lSocreMode.Clone();
                    tmpSocreMode.Socre = tmpSocreMode.Socre + i;
                    lQueue.EnQueue(tmpSocreMode);                    
                    int one = lQueue.DeQueue().Socre;
                    int two = lQueue.DeQueue().Socre;
                    //int three = lQueue.DeQueue().Socre;
                    Console.Write(one.ToString() + two.ToString());
                    if (len == lens)
                    {
                        Console.Write("\n");
                        len = 0;
                    }

                }
                while (lQueue.QueueSize != 0)
                {
                    len++;
                    //lQueue.EnQueue(tmpSocreMode);
                    int one = lQueue.DeQueue().Socre;
                    Console.Write(one.ToString());
                    if (len == lens)
                    {
                        Console.Write("\n");
                        len = 0;
                    }
                }
                Console.WriteLine("\n////////////////////////////////////");
                Console.ReadKey();
        }
    }

 

相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载