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

Đảo ngược Stack trong C#

Stack<T> (LIFO) - đảo ngược bằng cách Pop từ stack gốc Push vào stack mới.

Ví dụ minh họa

using System;
using System.Collections.Generic;

class Program
{
    static void Main()
    {
        var stack = new Stack();
        stack.Push('P');
        stack.Push('Q');
        stack.Push('R');
        
        Console.WriteLine("Stack gốc (top → bottom):");
        foreach (char c in stack) Console.Write($"{c} "); // R Q P
        Console.WriteLine();
        
        // Đảo ngược: Pop từ stack gốc → Push vào stack mới
        var reversed = new Stack();
        while (stack.Count > 0)
        {
            reversed.Push(stack.Pop());
        }
        
        Console.WriteLine("\nStack đảo ngược (top → bottom):");
        foreach (char c in reversed) Console.Write($"{c} "); // P Q R
        Console.WriteLine();
        
        // Cách khác: dùng List làm trung gian
        var list = new List(stack); // Lấy snapshot (top→bottom)
        list.Reverse();
        var reversed2 = new Stack(list);
    }
}

Kết quả đầu ra

Stack gốc (top → bottom):
R Q P 

Stack đảo ngược (top → bottom):
P Q R

Lưu ý: foreach trên Stack duyệt từ top xuống bottom. Stack<T> không hỗ trợ indexer. Đảo ngược in-place không thể vì Stack chỉ truy cập top.