.Net中队列类的操作与系统队列类queue的使用

简介: class MyQueue { //存放元素的数组 private object[] _array; //增长因子 private int _growFactor;...
    class MyQueue
    {
        //存放元素的数组
        private object[] _array;
        //增长因子
        private int _growFactor;

        //队头下标
        private int _head;
        //队尾下标
        private int _tail;
        private int _size;

        private const int _MinGrow = 4;
        //初始容量
        private const int _ShrikThreadhold = 0x20;

        public MyQueue()
            : this(_ShrikThreadhold, 2f)
        {
        }

        public MyQueue(int capacity, float growFactor)
        {
            if (capacity < 0)
            {
                throw new ArgumentOutOfRangeException("capacity", "初始容量不能为负!");
            }
            if ((growFactor < 1.0) || (growFactor > 10))
            {
                throw new ArgumentOutOfRangeException("growFactor", "增长因子应介于1和10之间!");
            }
            this._array = new object[capacity];
            this._head = 0;
            this._size = 0;
            this._tail = 0;
            this._growFactor = (int)(growFactor * 100f);
        }

        //入队
        public virtual void Enqueue(object obj)
        {

            if (this._size == this._array.Length)
            {//队列已满
                int capacity = (int)((this._array.Length * this._growFactor) / 100L);
                if (capacity < (this._array.Length + _MinGrow))
                {
                    capacity = this._array.Length + _MinGrow;
                }
                SetCapacity(capacity);
            }
            this._array[this._tail] = obj;
            this._tail = (this._tail + 1) % this._array.Length;
            this._size++;
        }

        //内存设置
        private void SetCapacity(int capacity)
        {
            object[] dest = new object[capacity];
            if (this._head < this._tail)//尾指针在头指针后
            {
                Array.Copy(this._array, this._head, dest, 0, this._size);
            }
            else//头指针在尾指针后
            {
                Array.Copy(this._array, this._head, dest, 0, this._array.Length - this._head);
                Array.Copy(this._array, 0, dest, this._array.Length - this._head, this._tail);
            }

            this._array = dest;
            this._head = 0;
            this._tail = (this._size == capacity) ? 0 : this._size;
        }


        //出队
        public virtual object Dequeue()
        {
            if (this._size == 0)
            {
                throw new InvalidOperationException("队列为空");

            }
            object obj = this._array[this._head];//出队
            this._array[this._head] = null;
            this._head = (this._head + 1) % this._array.Length;
            this._size--;
            return obj;
        }
        public virtual int Count
        {
            get { return this._size; }
        }
    }



        static void Main(string[] args)
        {

            Program main = new Program();
            main.testQueue();
        }
        private void testQueue()
        {
            Queue<int> myQueue = new Queue<int>();
            //MyQueue myQueue = new MyQueue();//与上面类使用一样
            myQueue.Enqueue(1);
            myQueue.Enqueue(2);
            myQueue.Enqueue(3);
            myQueue.Enqueue(4);

            Console.WriteLine("总数量:"+myQueue.Count.ToString());
            while (myQueue.Count > 0)
            {
                Console.WriteLine("出列:"+myQueue.Dequeue());
            }
            Console.WriteLine("数量:"+myQueue.Count.ToString());
            Console.ReadLine();
        }



相关文章
|
4月前
|
前端开发 JavaScript 关系型数据库
使用 OpenAuth.Net 快速搭建 .NET 企业级权限工作流系统
使用 OpenAuth.Net 快速搭建 .NET 企业级权限工作流系统
172 0
|
开发框架 .NET C#
C#|.net core 基础 - 删除字符串最后一个字符的七大类N种实现方式
【10月更文挑战第9天】在 C#/.NET Core 中,有多种方法可以删除字符串的最后一个字符,包括使用 `Substring` 方法、`Remove` 方法、`ToCharArray` 与 `Array.Copy`、`StringBuilder`、正则表达式、循环遍历字符数组以及使用 LINQ 的 `SkipLast` 方法。
401 8
|
7月前
|
SQL 小程序 API
如何运用C#.NET技术快速开发一套掌上医院系统?
本方案基于C#.NET技术快速构建掌上医院系统,结合模块化开发理念与医院信息化需求。核心功能涵盖用户端的预约挂号、在线问诊、报告查询等,以及管理端的排班管理和数据统计。采用.NET Core Web API与uni-app实现前后端分离,支持跨平台小程序开发。数据库选用SQL Server 2012,并通过读写分离与索引优化提升性能。部署方案包括Windows Server与负载均衡设计,确保高可用性。同时针对API差异、数据库老化及高并发等问题制定应对措施,保障系统稳定运行。推荐使用Postman、Redgate等工具辅助开发,提升效率与质量。
297 0
|
11月前
|
JSON 安全 API
.net 自定义日志类
在.NET中,创建自定义日志类有助于更好地管理日志信息。示例展示了如何创建、配置和使用日志记录功能,包括写入日志文件、设置日志级别、格式化消息等。注意事项涵盖时间戳、日志级别、JSON序列化、线程安全、日志格式、文件处理及示例使用。请根据需求调整代码。
183 13
|
11月前
|
前端开发 C# 开发者
.NET使用Umbraco CMS快速构建一个属于自己的内容管理系统
.NET使用Umbraco CMS快速构建一个属于自己的内容管理系统
184 12
|
11月前
|
Web App开发 前端开发 调度
一款基于 .NET + Blazor 开发的智能访客管理系统
一款基于 .NET + Blazor 开发的智能访客管理系统
172 8
|
11月前
|
开发框架 JavaScript 前端开发
精选2款.NET开源的博客系统
精选2款.NET开源的博客系统
159 8
|
11月前
|
前端开发 JavaScript C#
基于.NET8+Vue3开发的权限管理&个人博客系统
基于.NET8+Vue3开发的权限管理&个人博客系统
176 7
|
11月前
|
JSON 数据格式
.net HTTP请求类封装
`HttpRequestHelper` 是一个用于简化 HTTP 请求的辅助类,支持发送 GET 和 POST 请求。它使用 `HttpClient` 发起请求,并通过 `Newtonsoft.Json` 处理 JSON 数据。示例展示了如何使用该类发送请求并处理响应。注意事项包括:简单的错误处理、需安装 `Newtonsoft.Json` 依赖,以及建议重用 `HttpClient` 实例以优化性能。
293 2
|
开发框架 安全 Java
.NET技术的独特魅力与优势,涵盖高效的开发体验、强大的性能表现、高度的可扩展性及丰富的生态系统等方面,展示了其在软件开发领域的核心竞争力
本文深入探讨了.NET技术的独特魅力与优势,涵盖高效的开发体验、强大的性能表现、高度的可扩展性及丰富的生态系统等方面,展示了其在软件开发领域的核心竞争力。.NET不仅支持跨平台开发,具备出色的安全性和稳定性,还能与多种技术无缝集成,为企业级应用提供全面支持。
373 3