Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C#

การได้จำนวนสมาชิกใน Queue ใน C#

Queue<T> มี property Count คืนค่าจำนวนสมาชิกในคิว ทำงานใน O(1) ใช้ร่วมกับ Enqueue (เพิ่มท้าย), Dequeue (นำหน้า), Peek (ดูหน้า) และ Clear (ลบทั้งหมด)

ตัวอย่างโค้ดที่ 1: Clear และ Count

using System;
using System.Collections.Generic;

public class Demo
{
    public static void Main()
    {
        Queue queue = new Queue();
        queue.Enqueue("Gary");
        queue.Enqueue("Jack");
        queue.Enqueue("Ryan");
        queue.Enqueue("Kevin");
        queue.Enqueue("Mark");
        queue.Enqueue("Jack");
        queue.Enqueue("Ryan");
        queue.Enqueue("Kevin");

        Console.Write("Count of elements = ");
        Console.WriteLine(queue.Count);

        queue.Clear();
        Console.Write("Count of elements (updated) = ");
        Console.WriteLine(queue.Count);
    }
}

ผลลัพธ์

Count of elements = 8
Count of elements (updated) = 0

ตัวอย่างโค้ดที่ 2: เพิ่ม 5 รายการ

using System;
using System.Collections.Generic;

public class Demo
{
    public static void Main()
    {
        Queue queue = new Queue();
        queue.Enqueue("A");
        queue.Enqueue("B");
        queue.Enqueue("C");
        queue.Enqueue("D");
        queue.Enqueue("E");

        Console.WriteLine("Count of elements = " + queue.Count);
    }
}

ผลลัพธ์

Count of elements = 5

สรุป Property และเมธอด Queue<T>

MemberคำอธิบายComplexity
CountจำนวนสมาชิกO(1)
Enqueue(T)เพิ่มที่ท้ายO(1) amortized
Dequeue()นำออกจากหน้าO(1)
Peek()ดูหน้าคิว (ไม่ลบ)O(1)
Clear()ลบทั้งหมดO(n)
Contains(T)ตรวจสอบมีอยู่O(n)
ToArray()คัดลอกเป็น arrayO(n)
TrimExcess()ลด capacityO(n)

Queue vs Stack - ความแตกต่าง

คุณสมบัติQueue (FIFO)Stack (LIFO)
เพิ่มEnqueue (ท้าย)Push (บน)
นำออกDequeue (หน้า)Pop (บน)
ดูค่าPeek (หน้า)Peek (บน)
ลำดับ foreachFront → RearTop → Bottom
Use caseBFS, Job queue, RequestsDFS, Undo, Expression eval

Thread-safe Version

ใช้ ConcurrentQueue<T> (ใน System.Collections.Concurrent) สำหรับ multi-threaded:


var cq = new ConcurrentQueue();
cq.Enqueue(1);
cq.TryDequeue(out int result);