首页 > 编程语言 >C# 队列(Queue)

C# 队列(Queue)

时间:2024-03-12 23:45:13浏览次数:21  
标签:queue Console Enqueue C# System Queue 队列 using

原文链接:https://blog.csdn.net/qq_38693757/article/details/130891605

一、概述

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

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

官方参考文档:https://learn.microsoft.com/zh-cn/dotnet/api/system.collections.queue?view=net-7.0

二、基本的用法
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 属性

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

标签:queue,Console,Enqueue,C#,System,Queue,队列,using
From: https://www.cnblogs.com/Dongmy/p/18069654

相关文章

  • F. Microcycle
    原题链接题解原题可以理解为\(\to\)找出含有最小边权的边双连通分量,然后找出那个边对应的两个节点的第二条路本题我学会了:1.代码命名风格要含义清晰,不然很容易搞混,包括变量,自定义函数2.建边的时候尽量用链表式,因为dalao都在用,看题解方便一点code#definelllonglong#......
  • Windows下使用winsock库实现tcp客户端通信,C/C++
    编程思路第一步创建一个WASDATA结构体变量,用于存储关于Winsock库的信息;初始化Winsock库。第二步创建TCP套接字。第三步创建sockaddr_in结构体变量,用于储存服务器地址信息。里面包括设置地址族、IP地址、端口号。第四步调用connect函数连接服务器。通信调send函数发送数......
  • 实验1 C语言开发环境使用和数据类型、运算符、表达式
    1#include<stdio.h>2intmain()3{4printf("o\n");5printf("<H>\n");6printf("II\n");78return0;9}#include<stdio.h>intmain(){printf("oo\n"......
  • 第十四届蓝桥杯C++B组编程题题目以及题解
    a.冶炼金属(二分)思路:设任意一条冶炼记录投入金属数量为a,产出金属为b.对于每一条冶炼记录我们都可以得到一个转换率V的范围:b<=a/v<b+1即a/b<=v<a/(b+1)为什么是b+1呢?因为既然能产出b个金属,也就意味着一定不能产出b+1个,所以a/v<b+1每一条记录都可以得到v的一个区间,我......
  • 记CTF小白的第一次刷题经历
    师傅推荐先从CTFHub的技能树先刷起,今天只做了Web基础的三道题Web基础Web前置技能操作系统数据库HTTP协议HTML/CSS程序语言HTTP协议1.请求方式先学习了一下什么是HTTP协议里的请求方式首先看到题面,HTTP请求的方法是GET,让我们用CTFHUB方法,他就会给我们......
  • [LeetCode][LCR174] 寻找二叉搜索树中的目标节点
    题目LCR174.寻找二叉搜索树中的目标节点某公司组织架构以二叉搜索树形式记录,节点值为处于该职位的员工编号。请返回第cnt大的员工编号。示例1:输入:root=[7,3,9,1,5],cnt=27/\39/\15输出:7示例2:输......
  • AC自动机
    AC自动机前置芝士kmptrie介绍学算法首先肯定要清楚这个算法是用来解决啥东西的。AC自动机是用线性的复杂度来解决多模匹配的算法。额(⊙o⊙),说人话就是例如给你一堆字符串(称为模式串)和一个字符串(称为文本串),让你求模式串们在文本串出现的总次数。来直接看模板题:AC自动......
  • Hack The Box-Codify
    目录信息收集rustscannmapdirsearchWEB提权getusergetroot信息收集rustscan┌──(root㉿ru)-[~/kali/hackthebox]└─#rustscan-b225010.10.11.239--range=0-65535--ulimit=4500---A-sC.----..-..-..----..---..----..---..--..-..-.......
  • C语言救赎之路,有些鸟儿是困不住的(其三)。main+头文件+分支和循环语句(基本语法)
    前言:              在将之前先给大家分享个好玩的,这是我今天在课上的发生的。       今天老师在讲java与C语言主函数的都是什么开始的,老师让我们回答,不就是main吗?我突然想到什么?main?main?卧槽牢大!man!一口流利的洛杉矶口音的man随口而出。引来大家的wha......
  • 实验1 C语言开发环境使用和数据类型、运算符、表达式
    task1点击查看代码#include<stdio.h>intmain(){printf("o\n"); printf("<H>\n"); printf("II\n"); printf("o\n"); printf("<H>\n"); printf("II\n"); system("......