C#数据结构之队列(Quene)实例详解

C#数据结构之队列(Quene)实例详解

什么是队列?

队列是一种线性数据结构,只允许在队列的两端进行操作。队列是一种FIFO(First in First Out)的数据结构,即先进先出,类似于排队买票的场景。

C#中的队列(Quene)

C#中队列(Quene)是System.Collections命名空间中的一个类,可以通过引入System.Collections来使用它。如下所示创建一个队列:

Queue<string> queue = new Queue<string>();

队列的基本操作

入队(Enqueue)

向队列中添加元素可以使用Enqueue()方法:

queue.Enqueue("a");
queue.Enqueue("b");
queue.Enqueue("c");
queue.Enqueue("d");

出队(Dequeue)

从队列中取出元素可以使用Dequeue()方法:

string str = queue.Dequeue();

查看队列头元素(Peek)

通过Peek()方法查看队列头元素,但是不会将它从队列中取出:

string peekStr = queue.Peek();

判断队列是否为空(Count)

使用Count方法判断队列中是否有元素:

int count = queue.Count;
if (count > 0)
{
    // 队列不为空
}

队列的示例说明

队列实现排队叫号的场景

Queue<int> queue = new Queue<int>();

for (int i = 1; i <= 10; i++)
{
    queue.Enqueue(i);
}

while (queue.Count > 0)
{
    int num = queue.Dequeue();
    Console.WriteLine("请" + num + "号到界面前进行业务办理!");
}

队列实现消费者生产者模型的场景

Queue<int> queue = new Queue<int>();
int maxSize = 5;

new Thread(() =>
{
    while (true)
    {
        lock (queue)
        {
            if (queue.Count < maxSize)
            {
                int num = new Random().Next(1, 100);
                Console.WriteLine("生产者生产了{0},当前队列长度为{1}", num, queue.Count);
                queue.Enqueue(num);
            }
        }
    }
}).Start();

new Thread(() =>
{
    while (true)
    {
        lock (queue)
        {
            if (queue.Count > 0)
            {
                int num = queue.Dequeue();
                Console.WriteLine("消费者消费了{0},当前队列长度为{1}", num, queue.Count);
            }
        }
    }
}).Start();

在这个示例中我们定义了一个长度为5的队列,生产者线程不断生产随机数并加入队列中,直到队列达到最大长度,消费者线程不断从队列中取出元素并处理。这样就实现了消费者生产者模型。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C#数据结构之队列(Quene)实例详解 - Python技术站

(0)
上一篇 2023年5月17日
下一篇 2023年5月17日

相关文章

  • Java 详细分析四个经典链表面试题

    Java 详细分析四个经典链表面试题 简介 链表是数据结构中非常常见的一种形式,在Java中也有非常多的实现方式。本文将介绍Java中四个经典的链表面试题,并且详细分析它们的实现方法。在介绍每一个题目的详细实现之前,我们将简单介绍Java链表和链表常见操作。 Java链表 链表是一种线性结构,其中每个节点包含了一个数据域和一个指针域,指向下一个节点。Java…

    数据结构 2023年5月17日
    00
  • C语言数据结构 栈的基础操作

    C语言数据结构 栈的基础操作 1. 栈的基本概念 栈(Stack)是一种基于LIFO(后进先出)原理的数据结构,类似于一组盘子,只能在盘子的顶部进行操作。每次从顶部添加或移除盘子。 栈具有两个基本操作:入栈(push)和出栈(pop)。当添加一个元素时,我们称其为“push”,当移除一个元素时,我们称其为“pop”。 2. 栈的实现 栈可以使用数组或链表来实…

    数据结构 2023年5月17日
    00
  • Java面试题冲刺第十九天–数据库(4)

    本篇攻略是针对Java数据库相关面试题的,为了方便浏览,我将其分为以下几个部分: 1. 数据库连接池 在Java开发中,我们使用JDBC连接数据库进行数据操作时,为了提高数据库访问性能,通常会使用数据库连接池技术。常见的数据库连接池有:C3P0、Druid、HikariCP等。 C3P0 C3P0是一个开源的数据库连接池,可以设置最大连接数、最小连接数、最大…

    数据结构 2023年5月17日
    00
  • java 数据结构之堆排序(HeapSort)详解及实例

    Java 数据结构之堆排序(HeapSort)详解及实例 什么是堆排序 堆排序是一种树形选择排序,它的特点是不需要建立临时数组存放已排序的元素,而是直接在原数组上进行排序,因此空间复杂度比较小,时间复杂度为 $O(nlogn)$。 堆排序中需要用到的数据结构是堆,它是一种特殊的二叉树。堆分为大根堆和小根堆,大根堆满足任何一个非叶子节点的值都不小于其子节点的值…

    数据结构 2023年5月17日
    00
  • C语言如何建立链表并实现增删查改详解

    这是一个比较复杂的问题,需要严谨的思考和详细的解释。下面我将按照以下三个部分,分别介绍: 什么是链表,链表的基本结构和实现方法 如何在C语言中建立链表并实现增删查改 两个示例说明 1. 链表的基本结构和实现方法 链表是一种线性数据结构,每个节点包含两个域:一个数据域和一个指针域。数据域存储节点的数据,指针域存储下一个节点的地址。每个节点都可以独立分配空间,所…

    数据结构 2023年5月17日
    00
  • Java数据结构之插入排序与希尔排序

    Java数据结构之插入排序与希尔排序 插入排序 插入排序是一种简单而有效的排序算法。它的基本思想是将一个元素插入已经排好序的部分中。插入排序的过程可以用以下伪代码表示: for i=1 to length-1 j = i while j > 0 and array[j-1] > array[j] swap array[j] and array[j…

    数据结构 2023年5月17日
    00
  • 一行python实现树形结构的方法

    想要一行Python实现树形结构,我们需要使用Python的字典数据类型来完成任务。下面是详细的操作步骤: 创建树形结构字典 我们可以用嵌套字典来表示树形结构,我们需要选择其中一个节点作为根节点,并以键值对的形式保存其子节点。最终,我们将根节点作为整个字典的返回值。下面是实现代码: tree = lambda: defaultdict(tree) 插入节点 …

    数据结构 2023年5月17日
    00
  • C语言类的双向链表详解

    C语言类的双向链表详解 基本概念 什么是双向链表? 双向链表是链表的一种,它有两个指针域:一个指向前一个结点,一个指向后一个结点。每个结点包含两个部分:数据和指针域,指针域分别指向前一个结点和后一个结点,所以每个结点都是由数据和两个指针域构成的。 双向链表的作用? 双向链表可以支持O(1)时间复杂度的在任何一个结点前或后插入一个结点。 双向链表的实现方式? …

    数据结构 2023年5月17日
    00
合作推广
合作推广
分享本页
返回顶部