Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C#

Phương thức Queue.Enqueue() trong C#

Phương thức Queue<T>.Enqueue() trong C# được dùng để thêm một đối tượng vào cuối hàng đợi (rear của Queue). Queue tuân theo nguyên tắc FIFO (First-In-First-Out).

Cú pháp

public void Enqueue(T item);
  • item: Phần tử cần thêm vào hàng đợi. Có thể là null cho reference type.

Ví dụ 1: Enqueue, Dequeue, Count, Clear

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"); // Cho phép trùng lặp
        queue.Enqueue("Ryan");
        queue.Enqueue("Kevin");

        Console.WriteLine("Số lượng phần tử = " + queue.Count);
        Console.WriteLine("Queue...");
        foreach (string s in queue)
        {
            Console.WriteLine(s);
        }

        // Dequeue lấy và xóa phần tử đầu
        queue.Dequeue();
        queue.Dequeue();

        Console.WriteLine("\nQueue sau 2 Dequeue...");
        foreach (string s in queue)
        {
            Console.WriteLine(s);
        }
        Console.WriteLine("Số lượng (cập nhật) = " + queue.Count);

        queue.Clear();
        Console.WriteLine("\nSố lượng sau Clear = " + queue.Count);
    }
}

Kết quả

Số lượng phần tử = 8
Queue...
Gary
Jack
Ryan
Kevin
Mark
Jack
Ryan
Kevin

Queue sau 2 Dequeue...
Ryan
Kevin
Mark
Jack
Ryan
Kevin
Số lượng (cập nhật) = 6
Số lượng sau Clear = 0

Ví dụ 2: Enqueue thêm, Dequeue, Clear lần lượt

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");

        Console.WriteLine("Queue...");
        foreach (string s in queue) Console.WriteLine(s);
        Console.WriteLine("Số lượng = " + queue.Count);

        // Thêm thêm
        queue.Enqueue("Jack");
        queue.Enqueue("Ryan");
        queue.Enqueue("Kevin");

        Console.WriteLine("\nQueue sau Enqueue thêm...");
        foreach (string s in queue) Console.WriteLine(s);
        Console.WriteLine("Số lượng (cập nhật) = " + queue.Count);

        queue.Dequeue();
        queue.Dequeue();
        Console.WriteLine("\nQueue sau 2 Dequeue...");
        foreach (string s in queue) Console.WriteLine(s);
        Console.WriteLine("Số lượng = " + queue.Count);

        queue.Clear();
        Console.WriteLine("\nSố lượng sau Clear = " + queue.Count);
    }
}

Kết quả

Queue...
Gary
Jack
Ryan
Kevin
Mark
Số lượng = 5

Queue sau Enqueue thêm...
Gary
Jack
Ryan
Kevin
Mark
Jack
Ryan
Kevin
Số lượng (cập nhật) = 8

Queue sau 2 Dequeue...
Ryan
Kevin
Mark
Jack
Ryan
Kevin
Số lượng = 6

Số lượng sau Clear = 0

Các phương thức chính của Queue<T>

Phương thức Mô tả Phức độ
Enqueue(T) Thêm vào cuối O(1) trung bình
Dequeue() Lấy và xóa phần tử đầu O(1)
Peek() Xem phần tử đầu (không xóa) O(1)
Contains(T) Kiểm tra tồn tại O(n)
Clear() Xóa tất cả O(n)
ToArray() Sao chép sang mảng O(n)
TrimExcess() Giảm capacity nếu Count < 90% O(n)

Lưu ý

  • Queue cho phép phần tử trùng lặp và null (reference type).
  • Dequeue() ném InvalidOperationException nếu Queue rỗng. Dùng TryDequeue (ConcurrentQueue) hoặc kiểm tra Count > 0 trước.
  • Không thread-safe. Dùng ConcurrentQueue<T> cho đa luồng.
  • Capacity tự động mở rộng (gấp đôi) khi cần. TrimExcess() thu nhỏ nếu Count nhỏ hơn 90% Capacity.