Giới thiệu
Lớp Stack<T> trong namespace System.Collections.Generic đại diện cho cấu trúc dữ liệu LIFO (Last In, First Out). Để kiểm tra sự tồn tại của một phần tử, ta sử dụng phương thức Contains(T item). Lưu ý: Stack không được tối ưu cho tìm kiếm, phương thức này thực hiện duyệt tuyến tính O(n).
Ví dụ 1
using System;
using System.Collections.Generic;
public class Demo
{
public static void Main()
{
Stack stack = new Stack();
stack.Push(100);
stack.Push(150);
stack.Push(175);
stack.Push(200);
stack.Push(225);
stack.Push(250);
stack.Push(300);
stack.Push(400);
stack.Push(450);
stack.Push(500);
Console.WriteLine("Các phần tử trong Stack (từ đỉnh đến đáy):");
foreach (var val in stack)
{
Console.WriteLine(val);
}
Console.WriteLine("Số lượng phần tử trong Stack = " + stack.Count);
Console.WriteLine("Stack có chứa phần tử 400? = " + stack.Contains(400));
}
}
Kết quả
Các phần tử trong Stack (từ đỉnh đến đáy): 500 450 400 300 250 225 200 175 150 100 Số lượng phần tử trong Stack = 10 Stack có chứa phần tử 400? = True
Ví dụ 2
using System;
using System.Collections.Generic;
public class Demo
{
public static void Main()
{
Stack stack = new Stack();
stack.Push("Steve");
stack.Push("Gary");
stack.Push("Stephen");
stack.Push("Nathan");
stack.Push("Katie");
stack.Push("Andy");
stack.Push("David");
stack.Push("Amy");
Console.WriteLine("Các phần tử trong Stack (từ đỉnh đến đáy):");
foreach (var val in stack)
{
Console.WriteLine(val);
}
Console.WriteLine("Số lượng phần tử trong Stack = " + stack.Count);
Console.WriteLine("Stack có chứa phần tử 'Michael'? = " + stack.Contains("Michael"));
}
}
Kết quả
Các phần tử trong Stack (từ đỉnh đến đáy): Amy David Andy Katie Nathan Stephen Gary Steve Số lượng phần tử trong Stack = 8 Stack có chứa phần tử 'Michael'? = False
Lưu ý quan trọng
- Stack duyệt từ đỉnh (phần tử mới thêm gần nhất) đến đáy (phần tử cũ nhất).
- Phương thức
Contains()có độ phức tạp O(n) vì phải duyệt qua các phần tử. - Nếu cần tìm kiếm thường xuyên, cân nhắc sử dụng
HashSet<T>hoặcDictionary<TKey, TValue>song song. - Stack không hỗ trợ truy cập ngẫu nhiên theo chỉ mục.