Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C#

Kiểm tra Stack có chứa phần tử trong C#

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ặc Dictionary<TKey, TValue> song song.
  • Stack không hỗ trợ truy cập ngẫu nhiên theo chỉ mục.