登录 / 注册
C# 队列(Queue)
发布时间:2024-02-02 10:06:10 查看:231
一、概述

表示对象的先进先出集合。

队列和其他的数据结构一样,是一种存储容器,它遵循先进先出的原则,能够存储任意类型,但并不能获取到指定的位置,只能存入和取出,取出元素后,Queue 内部的元素自动删除,其实 队列 和 栈 使用方法大致差不多,只是取出数据的顺序不一样。

官方文档参考:Queue 类 (System.Collections) | Microsoft Learn

二、基本的用法
1.添加元素

添加元素使用 Enqueue 方法

    using System;
    using System.Collections;
    using System.Collections.Generic;
     
    namespace Queue_Test
    {
        internal class Program
        {
            static void Main(string[] args)
            {
                Queue queue = new Queue();
                queue.Enqueue(1);
                queue.Enqueue("你好");
                queue.Enqueue(true);
                queue.Enqueue(6.5);
     
                Console.ReadKey();
            }
        }
    }

2.取出元素
1)Dequeue 方法

取出元素后,元素会自动从 Queue 中删除

    using System;
    using System.Collections;
    using System.Collections.Generic;
     
    namespace Queue_Test
    {
        internal class Program
        {
            static void Main(string[] args)
            {
                Queue queue = new Queue();
                queue.Enqueue(1);
                queue.Enqueue("你好");
                queue.Enqueue(true);
                queue.Enqueue(6.5);
     
                var value = queue.Dequeue();
                Console.WriteLine("value:" + value);
                Console.WriteLine("长度:" + queue.Count);
     
                Console.ReadKey();
            }
        }
    }

运行

从执行的结果可以看到,最先存储的,最先被取出去。

2)Peek 方法

读取最先添加的一个元素,读取后,元素不会从 Queue 中删除,但是只能读取一个元素

    using System;
    using System.Collections;
    using System.Collections.Generic;
     
    namespace Queue_Test
    {
        internal class Program
        {
            static void Main(string[] args)
            {
                Queue queue = new Queue();
                queue.Enqueue(1);
                queue.Enqueue("你好");
                queue.Enqueue(true);
                queue.Enqueue(6.5);
     
                var value = queue.Peek();
                Console.WriteLine("value:" + value);
                Console.WriteLine("长度:" + queue.Count);
     
                Console.ReadKey();
            }
        }
    }

运行

 
3.判断元素是否存在

使用 Contains 来判断元素是否存在

    using System;
    using System.Collections;
    using System.Collections.Generic;
     
    namespace Queue_Test
    {
        internal class Program
        {
            static void Main(string[] args)
            {
                Queue queue = new Queue();
                queue.Enqueue(1);
                queue.Enqueue("你好");
                queue.Enqueue(true);
                queue.Enqueue(6.5);
     
                if(queue.Contains(1))
                    Console.WriteLine("存在");
                else
                    Console.WriteLine("不存在");
     
                Console.ReadKey();
            }
        }
    }

运行

 
4.获取队列的长度

长度的获取和 List 一样,使用 Count 属性

    using System;
    using System.Collections;
    using System.Collections.Generic;
     
    namespace Queue_Test
    {
        internal class Program
        {
            static void Main(string[] args)
            {
                Queue queue = new Queue();
                queue.Enqueue(1);
                queue.Enqueue("你好");
                queue.Enqueue(true);
                queue.Enqueue(6.5);
     
                Console.WriteLine("长度:" + queue.Count);
     
                Console.ReadKey();
            }
        }
    }

运行

 
5.遍历队列

可以使用 foreach 遍历队列,遍历并不会移除元素

    using System;
    using System.Collections;
    using System.Collections.Generic;
     
    namespace Queue_Test
    {
        internal class Program
        {
            static void Main(string[] args)
            {
                Queue queue = new Queue();
                queue.Enqueue(1);
                queue.Enqueue("你好");
                queue.Enqueue(true);
                queue.Enqueue(6.5);
     
                foreach (var item in queue)
                {
                    Console.WriteLine(item);
                }
                Console.WriteLine("长度:" + queue.Count);
     
                Console.ReadKey();
            }
        }
    }

运行

 
6.清空容器

使用 Clear 方法来清空队列

    using System;
    using System.Collections;
    using System.Collections.Generic;
     
    namespace Queue_Test
    {
        internal class Program
        {
            static void Main(string[] args)
            {
                Queue queue = new Queue();
                queue.Enqueue(1);
                queue.Enqueue("你好");
                queue.Enqueue(true);
                queue.Enqueue(6.5);
     
                Console.WriteLine("长度:" + queue.Count);
                queue.Clear();
                Console.WriteLine("长度:" + queue.Count);
     
                Console.ReadKey();
            }
        }
    }

运行

 
7.Queue 泛型类

queue 和 stack 一样,都有一个泛型类,作用也一样,就是用来存储固定类型的数据,在使用时,需要加上指定的类型,在使用这些数据时,就没必要对每个数据都去类型检测,使用起来也更加规范。

    using System;
    using System.Collections;
    using System.Collections.Generic;
     
    namespace Queue_Test
    {
        internal class Program
        {
            static void Main(string[] args)
            {
                Queue<string> queue = new Queue<string>();
     
                //向队列中添加元素
                queue.Enqueue("老一");
                queue.Enqueue("老二");
                queue.Enqueue("老三");
     
                //获取队列的数量
                int count = queue.Count;
                //队列中是否包含指定的 value
                bool b = queue.Contains("老王");
     
                //Peek方法是返回顶部的对象而不将其从堆栈中移除
                string names = queue.Peek();
     
                //获取队列中的元素
                //每次调用 Dequeue 方法,获取并移除队列中队首的元素
                string s1 = queue.Dequeue();
                Console.WriteLine(s1);
                string s2 = queue.Dequeue();
                Console.WriteLine(s2);
                string s3 = queue.Dequeue();
                Console.WriteLine(s3);
     
                //清空队列
                queue.Clear();
     
                Console.ReadKey();
            }
        }
    }

三、结束

queue 和 stack  的特征和使用方法大致相同,主要特点:先进先出,存在装箱拆箱,存储任意类型,无法获取指定位置元素,只能取出最先存储的元素。

end
————————————————
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
                        
原文链接:https://blog.csdn.net/qq_38693757/article/details/130891605
宁夏银川舜新艺软件开发
ShunXinyi Soft develop
主要经营
软件开发,网站制作,网页设计,移动应用(安卓、苹果),微信,微网站,
FLASH动画,电子商务,计算机软硬件及网络设备等。
电话:18695132945 QQ:23923027
舜新艺软件开发 宁ICP备16001093号-1 宁公网安备 64010602000809号