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

Phương thức Stack.Peek() trong C#

Giới thiệu

Phương thức Stack.Peek() trong C# trả về đối tượng ở đỉnh (top) của Stack mà không xóa nó. Stack tuân theo nguyên tắc LIFO (Last In, First Out).

Cú pháp

public virtual object Peek ();

Ví dụ 1: Peek và Clear

using System;
using System.Collections;

public class Demo {
    public static void Main() {
        Stack stack = new Stack();
        stack.Push("Inspiron");
        stack.Push("Alienware");
        stack.Push("Projectors");
        stack.Push("Monitors");
        stack.Push("XPS");
        stack.Push("Laptop");
        stack.Push("Notebook");

        Console.WriteLine("Các phần tử Stack...");
        foreach(string val in stack) {
            Console.WriteLine(val);
        }
        Console.WriteLine("Số lượng phần tử = " + stack.Count);
        Console.WriteLine("Phần tử ở đỉnh = " + stack.Peek());

        stack.Push("Ultrabook");
        stack.Push("Cameras");
        stack.Push("Keyboards");

        Console.WriteLine("\nCác phần tử Stack...đã cập nhật");
        foreach(string val in stack) {
            Console.WriteLine(val);
        }
        Console.WriteLine("Phần tử ở đỉnh = " + stack.Peek());
        Console.WriteLine("\nSố lượng phần tử (đã cập nhật) = " + stack.Count);

        stack.Clear();
        Console.Write("Số lượng phần tử (sau Clear) = " + stack.Count);
    }
}

Đầu ra ví dụ 1

Các phần tử Stack...
Notebook
Laptop
XPS
Monitors
Projectors
Alienware
Inspiron
Số lượng phần tử = 7
Phần tử ở đỉnh = Notebook

Các phần tử Stack...đã cập nhật
Keyboards
Cameras
Ultrabook
Notebook
Laptop
XPS
Monitors
Projectors
Alienware
Inspiron
Phần tử ở đỉnh = Keyboards
Số lượng phần tử (đã cập nhật) = 10
Số lượng phần tử (sau Clear) = 0

Ví dụ 2: Peek với Contains và Clone

using System;
using System.Collections;

public class Demo {
    public static void Main() {
        Stack stack = new Stack();
        stack.Push("Inspiron");
        stack.Push("Alienware");
        stack.Push("Projectors");
        stack.Push("Monitors");
        stack.Push("XPS");
        stack.Push("Laptop");
        stack.Push("Notebook");

        Console.WriteLine("Các phần tử Stack...");
        foreach(string val in stack) {
            Console.WriteLine(val);
        }
        Console.WriteLine("Số lượng phần tử = " + stack.Count);
        Console.WriteLine("Phần tử 'Speakers' có trong stack? = " + stack.Contains("Speakers"));

        stack.Push("Headphone");
        stack.Push("Keyboard");
        stack.Push("Earphone");

        Console.WriteLine("\nCác phần tử Stack...đã cập nhật");
        foreach(string val in stack) {
            Console.WriteLine(val);
        }
        Console.WriteLine("Số lượng phần tử (đã cập nhật) = " + stack.Count);
        Console.WriteLine("Phần tử 'Alienware' có trong stack? = " + stack.Contains("Alienware"));

        Stack stack2 = (Stack)stack.Clone();
        Console.WriteLine("\nCác phần tử Stack...đã clone");
        foreach(string val in stack2) {
            Console.WriteLine(val);
        }
        Console.Write("Số lượng phần tử (đã cập nhật) = " + stack2.Count);
        Console.WriteLine("\nĐỉnh Stack = " + stack2.Peek());
    }
}

Đầu ra ví dụ 2

Các phần tử Stack...
Notebook
Laptop
XPS
Monitors
Projectors
Alienware
Inspiron
Số lượng phần tử = 7
Phần tử 'Speakers' có trong stack? = False

Các phần tử Stack...đã cập nhật
Earphone
Keyboard
Headphone
Notebook
Laptop
XPS
Monitors
Projectors
Alienware
Inspiron
Số lượng phần tử (đã cập nhật) = 10
Phần tử 'Alienware' có trong stack? = True

Các phần tử Stack...đã clone
Earphone
Keyboard
Headphone
Notebook
Laptop
XPS
Monitors
Projectors
Alienware
Inspiron
Số lượng phần tử (đã cập nhật) = 10
Đỉnh Stack = Earphone

Lưu ý quan trọng

  • Nếu Stack rỗng, Peek() ném InvalidOperationException. Luôn kiểm tra Count > 0 trước.
  • Peek() trả về object (non-generic) hoặc T (generic Stack<T>).
  • Khác với Pop() (lấy và xóa), Peek() chỉ xem, không thay đổi stack.
  • Độ phức tạp thời gian: O(1).

So sánh Peek, Pop, Push

Phương thứcMô tảThay đổi CountTrả về
Push(item)Thêm item lên đỉnh+1void
Peek()Xem item ở đỉnh0item
Pop()Lấy và xóa item ở đỉnh-1item

Ứng dụng thực tế

  • Kiểm tra điều kiện trước khi Pop (tránh exception).
  • Thuật toán DFS (Depth-First Search) duyệt đỉnh stack trước khi quyết định.
  • Expression evaluation: xem toán tử ở đỉnh stack trước khi xử lý.
  • Undo/Redo: xem hành động cuối cùng trước khi hoàn tác.