C# 佇列(Queue)

yinghualeihenmei發表於2024-03-12

原文連結: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 的特徵和使用方法大致相同,主要特點:先進先出,存在裝箱拆箱,儲存任意型別,無法獲取指定位置元素,只能取出最先儲存的元素。

相關文章