BÀN VỀ QUEUE TRONG C#
Queue là gì nhỉ? Tra trong từ điển, bạn sẽ thấy nó có nghĩa là “xếp hàng”. A, mình biết rồi, có phải chúng mình học nó để tạo ra 1 hàng đợi không nhỉ? Chính xác là thế rồi, nhớ hồi học cấp 1, mỗi khi vào lớp, cô giáo thường cho tụi mình xếp hàng vào lớp, bạn nào đứng đầu hàng thì chắc chắn vào lớp trước rồi. Nhưng đó là ở ngoài đời, trong C# nó ra sao nhỉ? Mình giả sử là các bạn đã được học qua về Queue trong môn cấu trúc dữ liệu, và bài tutorial này được viết ra để các bạn đã, đang và sẽ học C# tham khảo về Queue.
Trong C#, chúng ta sử dụng lớp Queue để tạo ra những đối tượng hàng đợi để đáp ứng các yêu cầu của bài toán Sau đây là một số thuộc tính và phương thức thông dụng trong class Queue:
Code:
PUBLIC PROPERTIES – CÔNG DỤNG
Count: trả về số phần tử hiện được lưu trữ trong hàng đợi
IsSynchronized: trả về một trị bool cho biết liệu xem việc truy xuất Queue có đồng bộ hay không?
SyncRoot: trả về 1 đối tượng có thể được dùng đồng bộ hóa việc truy xuất Queue
PUBLIC METHODS – CÔNG DỤNG
Clear: xóa sạch hàng đợi
Clone: tạo ra 1 bản sao cho hàng đợi
Contains: xác định xem một phần tử có nằm trong hàng đợi hay không
CopyTo: sao chép 1 hoặc nhiều phần tử của hàng đợi lên mảng 1 chiều hiện hữu khởi đi từ chỉ mục được chỉ định
Enqueue: thêm một phần tử vào cuối hàng đợi
Dequeue: lấy ra và trả về phần tử đầu hàng đợi
GetEnumerator: trả về 1 enumerator cho phép rảo qua hàng đợi
GetHashCode: dùng như là 1 hàm băm (hash function) đối với một kiểu dữ liệu đặc biệt, thích ứng cho việc sử dụng trong các giải thuật băm và các cấu trúc dữ liệu giống như 1 bảng băm
GetType:trả về 1 kiểu dữ liệu Type của thể hiện hiện hành
Peek: trả về đối tượng nằm ở đầu hàng đợi, nhưng không gỡ bỏ nó khỏi hàng đợi
ToArray: sao chép các phần tử của hàng đợi qua 1 mảng 1 chiều
Để hiểu hơn về Queue, mình lấy 2 ví dụ minh họa:
Ví dụ 1 (lấy từ MSDN)
using System.Collections; {
{
// tạo 1 thể hiện của lớp Queue
myQ.Enqueue("Hello"); // đưa "Hello" vào cuối hàng đợi
myQ.Enqueue("World"); // đưa "Word" vào cuối hàng đợi
myQ.Enqueue("!"); // đưa "!" vào cuối hàng đợi
// Hiển thị thuộc tính và giá trị của hàng đợi
Console.WriteLine("myQ");
Console.WriteLine("\tCount: {0}", myQ.Count); //dùng để xem số lượng phần tử trong Queue
Console.Write("\tValues:");
PrintValues(myQ); // hàm này để in các giá trị trong Queue
Console.ReadLine();
}
{
Console.Write(" {0}", obj);
Console.WriteLine();
}
}
/*
Đoạn code trên cho kết quả sau trên màn hình console:
myQ
Count: 3
Values: Hello World !
*/
Ví dụ 2:
using System.Collections; {
{
IEnumerator myEnumerator = myCollection.GetEnumerator();
Console.Write("Gia tri cua hang doi:\t");
while (myEnumerator
.MoveNext()) Console.Write("{0} ", myEnumerator.Current);
Console.WriteLine();
}
{
Queue hangdoi
= new Queue
(); hangdoi.Enqueue(i * 5);
//cho hiển thị các giá trị trong hàng đợi
InGiaTri(hangdoi);
//cho gỡ bỏ 1 phần tử ra khỏi hàng đợi
Console.WriteLine("Removed:\t{0}", hangdoi.Dequeue());
//cho hiển thị các giá trị trong hàng đợi sau khi gỡ bỏ 1 phần tử
InGiaTri(hangdoi);
//lại gỡ bỏ thêm 1 phần tử nữa ra khỏi hàng đợi
Console.WriteLine("Removed:\t{0}", hangdoi.Dequeue());
//lại hiển thị nữa
InGiaTri(hangdoi);
//cho tui xem phần tử đầu hàng đợi nhé, nhưng không được gỡ bỏ đâu đó
Console.WriteLine("\nPhan tu dau hang doi:\t{0}", hangdoi.Peek());
//cho hiển thị các phần tử trong hàng đợi
InGiaTri(hangdoi);
Console.ReadLine();
}
}