Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C#

Push vs Pop ใน Stack Class C#

Stack เป็นโครงสร้างข้อมูลแบบ LIFO (Last-In, First-Out) - รายการที่เพิ่มเข้ามาสุดท้ายจะถูกนำออกก่อน เหมือนกับกองจานที่จัดเรียงไว้

Property หลักของ Stack

Property คำอธิบาย
Count จำนวนสมาชิกใน Stack

เมธอดหลัก (Methods)

Method คำอธิบาย
Push(item) เพิ่มสมาชิกเข้าไปด้านบน (Top)
Pop() นำสมาชิกด้านบนออกและคืนค่ากลับ
Peek() ดูสมาชิกด้านบน โดยไม่เอาออก
Clear() ล้างสมาชิกทั้งหมด
Contains(item) ตรวจสอบว่ามีสมาชิกนี้หรือไม่
ToArray() คัดลอกเป็น Array ใหม่

Push Operation - เพิ่มข้อมูล

Stack st = new Stack();
st.Push('A');  // Bottom -> A
st.Push('B');  //        A, B
st.Push('C');  //        A, B, C
st.Push('D');  // Top -> A, B, C, D

Pop Operation - นำข้อมูลออก

char top = st.Pop();  // คืนค่า 'D', Stack เหลือ A, B, C
top = st.Pop();       // คืนค่า 'C', Stack เหลือ A, B

ตัวอย่างโค้ดสมบูรณ์

using System;
using System.Collections;

namespace CollectionsApplication {
    class Program {
        static void Main(string[] args) {
            Stack st = new Stack();
            
            // Push operations
            st.Push('A');
            st.Push('B');
            st.Push('C');
            st.Push('D');
            
            Console.WriteLine("Current stack: ");
            foreach (char c in st) Console.Write(c + " ");  // D C B A
            Console.WriteLine();
            
            // เพิ่มเพิ่มเติม
            st.Push('P');
            st.Push('Q');
            
            // Peek - ดูค่าบนสุดโดยไม่เอาออก
            Console.WriteLine("The next poppable value: {0}", st.Peek());  // Q
            
            Console.WriteLine("Current stack: ");
            foreach (char c in st) Console.Write(c + " ");  // Q P D C B A
            Console.WriteLine();
            
            // Pop operations
            Console.WriteLine("Removing values....");
            st.Pop();  // Q
            st.Pop();  // P
            st.Pop();  // D
            
            Console.WriteLine("Current stack: ");
            foreach (char c in st) Console.Write(c + " ");  // C B A
        }
    }
}

ผลลัพธ์

Current stack: D C B A
The next poppable value in stack: Q
Current stack: Q P D C B A
Removing values....
Current stack: C B A

Stack<T> Generic Version (แนะนำให้ใช้)

using System.Collections.Generic;

Stack stack = new Stack();
stack.Push("First");
stack.Push("Second");
string top = stack.Pop();  // "Second" - ไม่ต้อง cast

กรณีการใช้งานจริง (Use Cases)

  • Undo/Redo - เก็บสถานะก่อนหน้า
  • Expression Evaluation - คำนวณนิพจน์คณิตศาสตร์ (Postfix)
  • Backtracking - อัลกอริทึมย้อนกลับ (Maze solving)
  • Browser History - ปุ่ม Back/Forward
  • Function Call Stack - การจัดการการเรียกฟังก์ชัน