32 Queue/Stack

Trong lập trình C#, hàng đợi (Queue)ngăn xếp (Stack) là hai cấu trúc dữ liệu quan trọng, được sử dụng để quản lý và xử lý các tập hợp dữ liệu theo các nguyên tắc khác nhau.

1. Hàng đợi (Queue)

Hàng đợi là cấu trúc dữ liệu tuân theo nguyên tắc FIFO (First In, First Out), nghĩa là phần tử được thêm vào đầu tiên sẽ được lấy ra đầu tiên. Điều này tương tự như việc xếp hàng: người đến trước sẽ được phục vụ trước.

Sử dụng lớp Queue trong C#

Trong C#, lớp Queue<T> được cung cấp để triển khai cấu trúc hàng đợi. Bạn cần nạp namespace System.Collections.Generic để sử dụng Queue<T>.

Khởi tạo hàng đợi:

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

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

  • Enqueue(T item): Thêm một phần tử vào cuối hàng đợi.
queue.Enqueue("Item A");
  • Dequeue(): Lấy và loại bỏ phần tử ở đầu hàng đợi. Nếu hàng đợi trống, phương thức này sẽ ném ngoại lệ InvalidOperationException.
string item = queue.Dequeue();
  • Peek(): Lấy nhưng không loại bỏ phần tử ở đầu hàng đợi. Nếu hàng đợi trống, phương thức này sẽ ném ngoại lệ InvalidOperationException.
string item = queue.Peek();
  • Count: Thuộc tính trả về số lượng phần tử hiện có trong hàng đợi.
int count = queue.Count;

Ví dụ về sử dụng Queue<T>:

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

// Thêm tài liệu vào hàng đợi
documents.Enqueue("Document 1");
documents.Enqueue("Document 2");
documents.Enqueue("Document 3");

// Xử lý các tài liệu trong hàng đợi
while (documents.Count > 0)
{
    string doc = documents.Dequeue();
    Console.WriteLine($"Processing {doc}, remaining {documents.Count} documents.");
}

Kết quả:

Processing Document 1, remaining 2 documents.
Processing Document 2, remaining 1 documents.
Processing Document 3, remaining 0 documents.

2. Ngăn xếp (Stack)

Ngăn xếp là cấu trúc dữ liệu tuân theo nguyên tắc LIFO (Last In, First Out), nghĩa là phần tử được thêm vào cuối cùng sẽ được lấy ra đầu tiên. Điều này tương tự như chồng đĩa: đĩa được đặt lên trên cùng sẽ được lấy ra đầu tiên.

Sử dụng lớp Stack trong C#

Trong C#, lớp Stack<T> được cung cấp để triển khai cấu trúc ngăn xếp. Bạn cần nạp namespace System.Collections.Generic để sử dụng Stack<T>.

Khởi tạo ngăn xếp:

Stack<string> stack = new Stack<string>();

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

  • Push(T item): Thêm một phần tử vào đỉnh ngăn xếp.
stack.Push("Item A");
  • Pop(): Lấy và loại bỏ phần tử ở đỉnh ngăn xếp. Nếu ngăn xếp trống, phương thức này sẽ ném ngoại lệ InvalidOperationException.
string item = stack.Pop();
  • Peek(): Lấy nhưng không loại bỏ phần tử ở đỉnh ngăn xếp. Nếu ngăn xếp trống, phương thức này sẽ ném ngoại lệ InvalidOperationException.
string item = stack.Peek();
  • Count: Thuộc tính trả về số lượng phần tử hiện có trong ngăn xếp.
int count = stack.Count;

Ví dụ về sử dụng Stack<T>:

Stack<string> plates = new Stack<string>();

// Thêm đĩa vào ngăn xếp
plates.Push("Plate 1");
plates.Push("Plate 2");
plates.Push("Plate 3");

// Lấy đĩa ra từ ngăn xếp
while (plates.Count > 0)
{
    string plate = plates.Pop();
    Console.WriteLine($"Removed {plate}, remaining {plates.Count} plates.");
}

Kết quả:

Removed Plate 3, remaining 2 plates.
Removed Plate 2, remaining 1 plates.
Removed Plate 1, remaining 0 plates.

3. So sánh QueueStack

  • Queue: Tuân theo nguyên tắc FIFO(First In, First Out), phù hợp cho các tình huống cần xử lý theo thứ tự đến trước, chẳng hạn như quản lý hàng đợi khách hàng hoặc xử lý các tác vụ theo thứ tự yêu cầu.
  • Stack: Tuân theo nguyên tắc LIFO(Last In, First Out), phù hợp cho các tình huống cần xử lý theo thứ tự ngược lại, chẳng hạn như quay lui trong thuật toán hoặc xử lý các tác vụ theo thứ tự ưu tiên cao nhất.

Việc lựa chọn sử dụng Queue hay Stack phụ thuộc vào yêu cầu cụ thể của bài toán và cách bạn muốn quản lý thứ tự xử lý dữ liệu.

Để lại một bình luận 0

Your email address will not be published. Required fields are marked *