Cần sử dụng 2 namspace sau:
using System.Collections; using System.Collections.Generic;
Hàng đợi Queue trong C#
Hàng đợi là mô hình FIFO (first in, first out - vào trước, ra trước hay đến trước được phục vụ trước), nó giải quyết các bài toán thực tế giống như xếp hàng mua vé máy bay ...
.NET cung cấp lớp Queue<T>
để giả quyết giải thuật hàng đợi.
Các phương thức, thuộc tính của Queue
Thành viên | Diễn giải |
---|---|
Count |
Thuộc tính lấy tổng số phần tử trong hàng |
Enqueue |
vào xếp hàng - đưa phần tử vào cuối hàng đợi |
Dequeue |
đọc - và loại ngay phần tử ở đầu hàng đợi - lỗi nếu hàng đợi không có phần tử nào |
Peek |
đọc phần tử đầu hàng đợi |
Vi dụ, các hồ sơ cần xử lý của khách hàng gửi đến, ai đến trước được đưa vào danh sách trước - và khi xử lý thì được xử lý trước
public static void testQueue () { Queue<string> hoso_canxuly = new Queue<string> (); hoso_canxuly.Enqueue ("Hồ sơ A"); // Hồ sơ xếp thứ nhất trong hàng đợi hoso_canxuly.Enqueue ("Hồ sơ B"); // Hồ sơ xếp thứ hai hoso_canxuly.Enqueue ("Hồ sơ C"); // Lấy hồ sơ xếp trước xử lý trước, cho đến hết while (hoso_canxuly.Count > 0) { var hs = hoso_canxuly.Dequeue(); Console.WriteLine($"Xử lý {hs}, còn lại {hoso_canxuly.Count}"); } } // KẾT QUẢ // Xử lý Hồ sơ A, còn lại 2 // Xử lý Hồ sơ B, còn lại 1 // Xử lý Hồ sơ C, còn lại 0
Ngăn xếp Stack C#
Ngăn xếp stack khá giống hàng đợi, nhưng khác đó là LIFO (last in, first out) - vào sau thì ra trước, nó giống như xếp hàng hóa vào các container, vào nhà kho - cái nào đưa vào sau thì khi thảo dỡ lại thực hiện đầu tiên, nó giống như xếp đĩa vào cọc đĩa CD cái nào đưa vào cọc trước sẽ được lấy ra sau ...
Trong C# với .NET nó cung cấp lớp Stack<T>
để thực hiện giải thuật này.
Các phương thức, thuộc tính của Stack
Thành viên | Diễn giải |
---|---|
Count |
Thuộc tính lấy tổng số phần tử trong hàng |
Push |
đẩy (thêm) một phần tử vào đỉnh stack |
Pop |
đọc - xóa phần tử đỉnh stack |
Peek |
đọc phần tử đỉnh stack |
Contains |
kiểm tra một phần tử có trong stack hay không |
Ví dụ, nhập vào A, B, C thì in ra CBA (vào sau ra trước)
public static void testQueue () { Queue<string> hoso_canxuly = new Queue<string> (); hoso_canxuly.Enqueue ("Hồ sơ A"); // Hồ sơ xếp thứ nhất trong hàng đợi hoso_canxuly.Enqueue ("Hồ sơ B"); // Hồ sơ xếp thứ hai hoso_canxuly.Enqueue ("Hồ sơ C"); // Lấy hồ sơ xếp trước xử lý trước, cho đến hết while (hoso_canxuly.Count > 0) { var hs = hoso_canxuly.Dequeue(); Console.WriteLine($"Xử lý {hs}, còn lại {hoso_canxuly.Count}"); } } // Bốc dỡ Sản phẩm C / còn lại 2 // Bốc dỡ Sản phẩm B / còn lại 1 // Bốc dỡ Sản phẩm A / còn lại 0
Tham khảo mã nguồn: CS024_SomeCollections hoặc tải về ex024