• C# 队列(Queue)


    目录

    一、概述

    二、基本的用法

    1.添加元素

    2.取出元素

    1)Dequeue 方法

    2)Peek 方法

    3.判断元素是否存在

    4.获取队列的长度

    5.遍历队列

    6.清空容器

    7.Queue 泛型类

    三、结束


    一、概述

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

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

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

    二、基本的用法

    1.添加元素

    添加元素使用 Enqueue 方法

    1. using System;
    2. using System.Collections;
    3. using System.Collections.Generic;
    4. namespace Queue_Test
    5. {
    6. internal class Program
    7. {
    8. static void Main(string[] args)
    9. {
    10. Queue queue = new Queue();
    11. queue.Enqueue(1);
    12. queue.Enqueue("你好");
    13. queue.Enqueue(true);
    14. queue.Enqueue(6.5);
    15. Console.ReadKey();
    16. }
    17. }
    18. }

    2.取出元素

    1)Dequeue 方法

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

    1. using System;
    2. using System.Collections;
    3. using System.Collections.Generic;
    4. namespace Queue_Test
    5. {
    6. internal class Program
    7. {
    8. static void Main(string[] args)
    9. {
    10. Queue queue = new Queue();
    11. queue.Enqueue(1);
    12. queue.Enqueue("你好");
    13. queue.Enqueue(true);
    14. queue.Enqueue(6.5);
    15. var value = queue.Dequeue();
    16. Console.WriteLine("value:" + value);
    17. Console.WriteLine("长度:" + queue.Count);
    18. Console.ReadKey();
    19. }
    20. }
    21. }

    运行

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

    2)Peek 方法

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

    1. using System;
    2. using System.Collections;
    3. using System.Collections.Generic;
    4. namespace Queue_Test
    5. {
    6. internal class Program
    7. {
    8. static void Main(string[] args)
    9. {
    10. Queue queue = new Queue();
    11. queue.Enqueue(1);
    12. queue.Enqueue("你好");
    13. queue.Enqueue(true);
    14. queue.Enqueue(6.5);
    15. var value = queue.Peek();
    16. Console.WriteLine("value:" + value);
    17. Console.WriteLine("长度:" + queue.Count);
    18. Console.ReadKey();
    19. }
    20. }
    21. }

    运行

     

    3.判断元素是否存在

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

    1. using System;
    2. using System.Collections;
    3. using System.Collections.Generic;
    4. namespace Queue_Test
    5. {
    6. internal class Program
    7. {
    8. static void Main(string[] args)
    9. {
    10. Queue queue = new Queue();
    11. queue.Enqueue(1);
    12. queue.Enqueue("你好");
    13. queue.Enqueue(true);
    14. queue.Enqueue(6.5);
    15. if(queue.Contains(1))
    16. Console.WriteLine("存在");
    17. else
    18. Console.WriteLine("不存在");
    19. Console.ReadKey();
    20. }
    21. }
    22. }

    运行

     

    4.获取队列的长度

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

    1. using System;
    2. using System.Collections;
    3. using System.Collections.Generic;
    4. namespace Queue_Test
    5. {
    6. internal class Program
    7. {
    8. static void Main(string[] args)
    9. {
    10. Queue queue = new Queue();
    11. queue.Enqueue(1);
    12. queue.Enqueue("你好");
    13. queue.Enqueue(true);
    14. queue.Enqueue(6.5);
    15. Console.WriteLine("长度:" + queue.Count);
    16. Console.ReadKey();
    17. }
    18. }
    19. }

    运行

     

    5.遍历队列

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

    1. using System;
    2. using System.Collections;
    3. using System.Collections.Generic;
    4. namespace Queue_Test
    5. {
    6. internal class Program
    7. {
    8. static void Main(string[] args)
    9. {
    10. Queue queue = new Queue();
    11. queue.Enqueue(1);
    12. queue.Enqueue("你好");
    13. queue.Enqueue(true);
    14. queue.Enqueue(6.5);
    15. foreach (var item in queue)
    16. {
    17. Console.WriteLine(item);
    18. }
    19. Console.WriteLine("长度:" + queue.Count);
    20. Console.ReadKey();
    21. }
    22. }
    23. }

    运行

     

    6.清空容器

    使用 Clear 方法来清空队列

    1. using System;
    2. using System.Collections;
    3. using System.Collections.Generic;
    4. namespace Queue_Test
    5. {
    6. internal class Program
    7. {
    8. static void Main(string[] args)
    9. {
    10. Queue queue = new Queue();
    11. queue.Enqueue(1);
    12. queue.Enqueue("你好");
    13. queue.Enqueue(true);
    14. queue.Enqueue(6.5);
    15. Console.WriteLine("长度:" + queue.Count);
    16. queue.Clear();
    17. Console.WriteLine("长度:" + queue.Count);
    18. Console.ReadKey();
    19. }
    20. }
    21. }

    运行

     

    7.Queue 泛型类

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

    1. using System;
    2. using System.Collections;
    3. using System.Collections.Generic;
    4. namespace Queue_Test
    5. {
    6. internal class Program
    7. {
    8. static void Main(string[] args)
    9. {
    10. Queue<string> queue = new Queue<string>();
    11. //向队列中添加元素
    12. queue.Enqueue("老一");
    13. queue.Enqueue("老二");
    14. queue.Enqueue("老三");
    15. //获取队列的数量
    16. int count = queue.Count;
    17. //队列中是否包含指定的 value
    18. bool b = queue.Contains("老王");
    19. //Peek方法是返回顶部的对象而不将其从堆栈中移除
    20. string names = queue.Peek();
    21. //获取队列中的元素
    22. //每次调用 Dequeue 方法,获取并移除队列中队首的元素
    23. string s1 = queue.Dequeue();
    24. Console.WriteLine(s1);
    25. string s2 = queue.Dequeue();
    26. Console.WriteLine(s2);
    27. string s3 = queue.Dequeue();
    28. Console.WriteLine(s3);
    29. //清空队列
    30. queue.Clear();
    31. Console.ReadKey();
    32. }
    33. }
    34. }

    三、结束

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

    end

  • 相关阅读:
    代码随想录训练营第III期--034--python
    Threejs 3D模型入门项目
    Habor私有仓库
    [附源码]Python计算机毕业设计Django的网上点餐系统
    C++ 学习链接
    http 内容协商
    手撸代码,Redis发布订阅机制实现
    win编写bat脚本启动java服务
    法国博士后招聘|国家科学研究中心 (CNRS) 计算生物学
    ORACLE的utl_raw函数在不同字符集的数据库中的用法
  • 原文地址:https://blog.csdn.net/qq_38693757/article/details/130891605