天天看点

C#队列 (数组实现)C# 队列 (使用数组实现)

C# 队列 (使用数组实现)

C#队列 (数组实现)C# 队列 (使用数组实现)

队列的实现

首先定义队列的类

C#队列 (数组实现)C# 队列 (使用数组实现)

然后是两个基础的方法(入队,出队)

出队

C#队列 (数组实现)C# 队列 (使用数组实现)

入队

C#队列 (数组实现)C# 队列 (使用数组实现)

扩容的方法

C#队列 (数组实现)C# 队列 (使用数组实现)

然后是测试

C#队列 (数组实现)C# 队列 (使用数组实现)

最后是全部的代码

using System;

namespace ConsoleApp18
{
    class Program
    {
        static void Main(string[] args)
        {
            MyQueue<int> queue=new MyQueue<int>();
            queue.Enqueue(1);
            queue.Enqueue(2);
            queue.Enqueue(3);
            queue.Enqueue(4);
            queue.Enqueue(5);
            queue.Enqueue(6);
            queue.Enqueue(7);
            queue.Enqueue(8);
            queue.Enqueue(9);
            queue.Enqueue(10);
            queue.Enqueue(11);

            while (queue.Count!=0)
            {
                Console.WriteLine(queue.Dequeue());
            }
            Console.ReadKey();
        }
    }

    class MyQueue<T>
    {
        private T[] queues;
        private int first;
        private int list;
        private int size = 5;//默认的长度为5

        /// <summary>
        /// 构造函数来初始化长度
        /// </summary>
        public MyQueue()
        {
            queues=new T[size];
        }

        /// <summary>
        /// 队列中的元素数量
        /// </summary>
        public int Count
        {
            get
            {
                return first;
            }
        }

        /// <summary>
        /// 出队
        /// </summary>
        /// <returns></returns>
        public T Dequeue()
        {
            if (first != 0)
            {
                first--;
                return queues[list++];
            }
            else
            {
                throw new Exception("队列为空");
            }
        }

        /// <summary>
        /// 入队
        /// </summary>
        /// <param name="item"></param>
        public void Enqueue(T item)
        {
            if (Count<size)
            {
                
                queues[first++] = item;
            }
            else
            {
                //扩容
                Enlarge();
                queues[first++] = item;
            }
        }

        /// <summary>
        /// 扩容
        /// </summary>
        private void Enlarge()
        {
            //扩容二倍
            T[] tmpArr=new T[queues.Length*2];
            for (int i = 0; i < queues.Length; i++)
            {
                tmpArr[i] = queues[i];
            }
            queues = tmpArr;
            //size也要变为2倍
            size *= 2;
        }
    }
}