Mang đến cho bạn hành trang là Kiến thức và Kinh nghiệm

Lựa chọn chủ đề bạn quan tâm

Cùng nhau thảo luận về các vấn đề

Hãy theo dõi chúng tôi nếu bạn thấy bổ ích

  1. Hỏi đáp IT
  2. Hỏi nhanh

[CHIA SẺ] Queue (hàng đợi) trong C#

2285 Lượt xem 1 Bình luận 0 Lượt báo xấu
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:

Các thuộc tính:

- 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

Các phương thức:

- 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:
Code:
 1. using System;   
   2. using System.Collections;   
   3. public class SamplesQueue   
   4. {   
   5.     public static void Main()   
   6.     {   
   7.         // tạo 1 thể hiện của lớp Queue   
   8.         Queue myQ = new Queue();   
   9.         myQ.Enqueue("Hello"); // đưa "Hello" vào cuối hàng đợi   
  10.         myQ.Enqueue("World"); // đưa "Word" vào cuối hàng đợi   
  11.         myQ.Enqueue("!"); // đưa "!" vào cuối hàng đợi   
  12.         // Hiển thị thuộc tính và giá trị của hàng đợi   
  13.         Console.WriteLine("myQ");   
  14.         Console.WriteLine("\tCount: {0}", myQ.Count); //dùng để xem số lượng phần tử trong Queue   
  15.         Console.Write("\tValues:");   
  16.         PrintValues(myQ); // hàm này để in các giá trị trong Queue   
  17.         Console.ReadLine();   
  18.     }   
  19.    
  20.     public static void PrintValues(IEnumerable myCollection)   
  21.     {   
  22.         foreach (Object obj in myCollection)   
  23.         Console.Write(" {0}", obj);   
  24.         Console.WriteLine();   
  25.     }   
  26. }  

Đ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:
PHP Code:

Code:

1. using System;   
2. using System.Collections;   
   3. public class SamplesQueue   
   4. {   
   5.     public static void InGiaTri(IEnumerable myCollection)   
   6.     {   
   7.         IEnumerator myEnumerator = myCollection.GetEnumerator();   
   8.         Console.Write("Gia tri cua hang doi:\t");   
   9.         while (myEnumerator.MoveNext())   
  10.             Console.Write("{0} ", myEnumerator.Current);   
  11.         Console.WriteLine();   
  12.     }   
  13.     public static void Main()   
  14.     {   
  15.         Queue hangdoi = new Queue();   
  16.         for (int i = 0; i < 8; i++)   
  17.             hangdoi.Enqueue(i * 5);   
  18.         //cho hiển thị các giá trị trong hàng đợi   
  19.         InGiaTri(hangdoi);   
  20.         //cho gỡ bỏ 1 phần tử ra khỏi hàng đợi   
  21.         Console.WriteLine("Removed:\t{0}", hangdoi.Dequeue());   
  22.         //cho hiển thị các giá trị trong hàng đợi sau khi gỡ bỏ 1 phần tử   
  23.         InGiaTri(hangdoi);   
  24.         //lại gỡ bỏ thêm 1 phần tử nữa ra khỏi hàng đợi   
  25.         Console.WriteLine("Removed:\t{0}", hangdoi.Dequeue());   
  26.         //lại hiển thị nữa   
  27.         InGiaTri(hangdoi);   
  28.         //xem phần tử đầu hàng đợi, nhưng không được gỡ bỏ đâu đó   
  29.         Console.WriteLine("\nPhan tu dau hang doi:\t{0}", hangdoi.Peek());   
  30.         //cho hiển thị các phần tử trong hàng đợi   
  31.         InGiaTri(hangdoi);   
  32.         Console.ReadLine();   
  33.     }   
34. }  
Câu trả lời

- Bạn đã sẵn sàng thảo luận về chủ đề này. Hãy bấm "Viết bình luận", bạn có thể lựa chọn sử dụng tài khoản Facebook hoặc Google++

- Vì sự phát triển của cộng đồng CNTT/CNPM tại Việt Nam!

Unknown user
No responses yet

tks bác nhé, code bác chú thích rất dễ hiểu
0 Lượt thích

Từ khóa tìm kiếm

Câu trả lời mới nhất

Tin tuyển dụng