ููŠ ุงู„ู…ู‚ุงู„ ุฏู‡ ู‡ู†ุชูƒู„ู… ุนู† StackุŒ ูˆู‡ูˆ ูˆุงุญุฏ ู…ู† ุงู„ู€ Non-Generic Collections ุงู„ู…ู‡ู…ุฉ ููŠ C# ูˆุงู„ู„ูŠ ุจูŠู…ุซู„ ู…ุจุฏุฃ Last-In, First-Out (LIFO).

ุงู„ู€ Stack ู…ูˆุฌูˆุฏ ููŠ System.CollectionsุŒ ูˆุจู†ุณุชุฎุฏู…ู‡ ู„ู…ุง ู†ูƒูˆู† ู…ุญุชุงุฌูŠู† ู†ูˆุตู„ ู„ู„ุนู†ุงุตุฑ ุจู†ูุณ ุงู„ุชุฑุชูŠุจ ุงู„ุนูƒุณูŠ ุงู„ู„ูŠ ุฏุฎู„ุช ุจูŠู‡.

What is Stack and How Does it Work?

ุงู„ู€ Stack ู‡ูˆ collection ุจูŠุดุชุบู„ ุจู…ุจุฏุฃ LIFOุŒ ูŠุนู†ูŠ โ€œุขุฎุฑ ูˆุงุญุฏ ุฏุฎู„ ู‡ูˆ ุฃูˆู„ ูˆุงุญุฏ ูŠุฎุฑุฌโ€.

ุฃุญุณู† ู…ุซุงู„ ุนุดุงู† ู†ูู‡ู… ุงู„ู…ุจุฏุฃ ุฏู‡ ู‡ูˆ ูƒูˆู…ุฉ ู…ู† ุงู„ูƒุชุจ ุฃูˆ ุงู„ุฃุทุจุงู‚ ููˆู‚ ุจุนุถ. ุขุฎุฑ ูƒุชุงุจ ุญุทูŠุชู‡ ููˆู‚ ู‡ูˆ ุฃูˆู„ ูƒุชุงุจ ู‡ุชู‚ุฏุฑ ุชุดูŠู„ู‡ุŒ ูˆู…ุณุชุญูŠู„ ุชุดูŠู„ ูƒุชุงุจ ู…ู† ุงู„ู†ุต.

ููŠ C#ุŒ ุงู„ู€ Stack ุจูŠุดุชุบู„ ุจู†ูุณ ุงู„ุทุฑูŠู‚ุฉ. ุงู„ุนู†ุงุตุฑ ุจุชุชุญุท ููˆู‚ ุจุนุถู‡ุงุŒ ูˆุงู„ุนู…ู„ูŠุงุช ุงู„ุฃุณุงุณูŠุฉ ู„ูŠู‡ุง ุฃุณู…ุงุก ุฎุงุตุฉ:

  • ุงู„ู€ Push: ุฏูŠ ุนู…ู„ูŠุฉ ุฅุถุงูุฉ ุนู†ุตุฑ ุฌุฏูŠุฏ ููˆู‚ ุงู„ู€ Stack.
  • ุงู„ู€ Pop: ุฏูŠ ุนู…ู„ูŠุฉ ุฅุฒุงู„ุฉ ุงู„ุนู†ุตุฑ ุงู„ู„ูŠ ู…ูˆุฌูˆุฏ ููŠ ู‚ู…ุฉ ุงู„ู€ Stack.

ู…ู„ุญูˆุธุฉ: ููŠู‡ ู†ุณุฎุชูŠู† ู…ู† Stack ููŠ C#ุŒ ูˆุงุญุฏุฉ Non-Generic ููŠ System.Collections (ุงู„ู„ูŠ ู‡ู†ุชูƒู„ู… ุนู†ู‡ุง ู‡ู†ุง)ุŒ ูˆูˆุงุญุฏุฉ Generic ูˆ type-safe ุงุณู…ู‡ุง Stack<T> ููŠ System.Collections.Generic.

Creating a Stack

ุฃูˆู„ ุญุงุฌุฉุŒ ู„ุงุฒู… ู†ุนู…ู„ using System.Collections;. ุจุนุฏูŠู† ุจู†ู†ุดุฆ instance ู…ู† ุงู„ู€ Stack.

// Create an empty stack with default capacity
Stack stack = new Stack();

ููŠู‡ ุทุฑู‚ ุชุงู†ูŠุฉ ู„ู„ุฅู†ุดุงุกุŒ ุฒูŠ ุฅู†ูƒ ุชุญุฏุฏ ุงู„ู€ capacity ุงู„ุฃูˆู„ูŠุฉุŒ ุฃูˆ ุชู†ุดุฆู‡ ู…ู† collection ุชุงู†ูŠุฉ.

Adding Elements (Push)

ุนุดุงู† ู†ุถูŠู ุนู†ุงุตุฑ ู„ู„ู€ StackุŒ ุจู†ุณุชุฎุฏู… ุงู„ู€ method ุงู„ู„ูŠ ุงุณู…ู‡ุง Push(). ุงู„ู€ method ุฏูŠ ุจุชุถูŠู ุงู„ุนู†ุตุฑ ููŠ ู‚ู…ุฉ ุงู„ู€ Stack.

// Create a stack collection
Stack stack = new Stack();
 
// Add items to the stack using the Push() method
stack.Push(10);
stack.Push("Hello");
stack.Push(3.14f);
stack.Push(true);
stack.Push(67.8);
stack.Push('A');
 
// Printing the stack items using a foreach loop
// The loop starts from the top element (last one pushed)
foreach (object item in stack)
{
    Console.WriteLine(item);
}

ุงู„ู€ Stack ูƒู€ Non-Generic collection ุจูŠู‚ุจู„ ุฃูŠ ู†ูˆุน ุจูŠุงู†ุงุชุŒ ูˆูƒู…ุงู† ุจูŠู‚ุจู„ ู‚ูŠู… null ูˆู‚ูŠู… ู…ูƒุฑุฑุฉ.

Removing Elements

Pop() vs. Clear()

  • ุงู„ู€ Pop(): ุฏูŠ ุงู„ู€ method ุงู„ุฃุณุงุณูŠุฉ ุงู„ู„ูŠ ุจุชุญุฐู ุงู„ุนู†ุตุฑ ุงู„ู„ูŠ ููŠ ู‚ู…ุฉ ุงู„ู€ Stack ูˆุจุชุฑุฌุนู‡ูˆู„ูƒ. ู„ูˆ ุงู„ู€ Stack ูุงุถูŠ ูˆุญุงูˆู„ุช ุชุนู…ู„ Pop()ุŒ ู‡ูŠุญุตู„ InvalidOperationException.
  • ุงู„ู€ Clear(): ุจุชุญุฐู ูƒู„ ุงู„ุนู†ุงุตุฑ ุงู„ู„ูŠ ููŠ ุงู„ู€ Stack ู…ุฑุฉ ูˆุงุญุฏุฉ.
Console.WriteLine($"All Stack Elements: Count {stack.Count}");
foreach (var item in stack)
{
    Console.Write($"{item} ");
}
 
// Remove and return an item from the stack using the Pop() method
Console.WriteLine($"\n\nDeleted Element: {stack.Pop()}");
 
Console.WriteLine($"\nAll Stack Elements After Deletion: Count {stack.Count}");
foreach (var item in stack)
{
    Console.Write($"{item} ");
}

Getting the Topmost Element

ุฅุฒุงูŠ ุชุดูˆู ุงู„ุนู†ุตุฑ ุงู„ู„ูŠ ุนู„ู‰ ุงู„ู‚ู…ุฉ ู…ู† ุบูŠุฑ ู…ุง ุชุญุฐูู‡ุŸ ู‡ู†ุง ุจูŠุฌูŠ ุงู„ูุฑู‚ ุจูŠู† Pop() ูˆ Peek().

Pop() vs. Peek()

  • ุงู„ู€ Pop(): ุจุชุญุฐู ุงู„ุนู†ุตุฑ ุงู„ู„ูŠ ุนู„ู‰ ุงู„ู‚ู…ุฉ ูˆุจุชุฑุฌุนู‡.
  • ุงู„ู€ Peek(): ุจุชุฑุฌุน ุงู„ุนู†ุตุฑ ุงู„ู„ูŠ ุนู„ู‰ ุงู„ู‚ู…ุฉ ู…ู† ุบูŠุฑ ู…ุง ุชุญุฐูู‡.

ู„ูˆ ุงู„ู€ Stack ูุงุถูŠุŒ ุงู„ุงุชู†ูŠู† ุจูŠุฑู…ูˆุง InvalidOperationException.

Console.WriteLine($"Total elements present in stack: {stack.Count}"); // e.g., 6
 
// Using Pop()
Console.WriteLine($"Topmost element of stack is {stack.Pop()}"); // Returns 'A' and removes it
Console.WriteLine($"Total elements present in stack: {stack.Count}"); // Now 5
 
// Using Peek()
Console.WriteLine($"Topmost element of Stack is {stack.Peek()}"); // Returns 67.8 but doesn't remove it
Console.WriteLine($"Total elements present in stack: {stack.Count}"); // Still 5

Checking for an Element

ุนุดุงู† ุชุชุฃูƒุฏ ุฅุฐุง ูƒุงู† ููŠู‡ ุนู†ุตุฑ ู…ุนูŠู† ู…ูˆุฌูˆุฏ ููŠ ุงู„ู€ Stack ุฃูˆ ู„ุฃุŒ ุจู†ุณุชุฎุฏู… Contains(object).

if (stack.Contains("Hello"))
{
    Console.WriteLine("Element 'Hello' is found");
}
else
{
    Console.WriteLine("Element 'Hello' is not found");
}

ู…ู„ุญูˆุธุฉ ุฃุฏุงุก: ุงู„ู€ Contains() ุจุชุงุฎุฏ ูˆู‚ุช O(n)ุŒ ูŠุนู†ูŠ ุจุชู„ู ุนู„ู‰ ูƒู„ ุงู„ุนู†ุงุตุฑ ุนุดุงู† ุชู„ุงู‚ูŠ ุงู„ุนู†ุตุฑ ุงู„ู…ุทู„ูˆุจุŒ ูู…ู…ูƒู† ุชูƒูˆู† ุจุทูŠุฆุฉ ู„ูˆ ุงู„ู€ Stack ูƒุจูŠุฑ ุฌุฏู‹ุง.

Other Useful Methods and Properties

  • ุงู„ู€ Clone(): ุจุชุนู…ู„ Shallow Copy ู…ู† ุงู„ู€ Stack.
  • ุงู„ู€ CopyTo(array, index): ุจุชู†ุณุฎ ุนู†ุงุตุฑ ุงู„ู€ Stack ู„ู€ array ุนุงุฏูŠุฉุŒ ุจู†ูุณ ุงู„ุชุฑุชูŠุจ (ู…ู† ุงู„ู‚ู…ุฉ ู„ู„ู‚ุงุนุฏุฉ).

Properties

  • ุงู„ู€ Count: ุจุชุฑุฌุน ุนุฏุฏ ุงู„ุนู†ุงุตุฑ ุงู„ุญุงู„ูŠุฉ ููŠ ุงู„ู€ Stack.
  • ุงู„ู€ IsSynchronized: ุจุชุนุฑููƒ ุฅุฐุง ูƒุงู† ุงู„ู€ Stack ุฏู‡ thread-safe.
  • ุงู„ู€ SyncRoot: ุจุชุฑุฌุน object ู…ู…ูƒู† ู†ุณุชุฎุฏู…ู‡ ุนุดุงู† ู†ุนู…ู„ synchronization ูŠุฏูˆูŠ.

When to Use Stack in Real-Time Applications?

ุงู„ู€ Stack ู…ููŠุฏ ุฌุฏู‹ุง ููŠ ุณูŠู†ุงุฑูŠูˆู‡ุงุช ูƒุชูŠุฑ ุฒูŠ:

  • ุงู„ู€ Undo/Redo Functionality: ููŠ ุจุฑุงู…ุฌ ุงู„ุชุนุฏูŠู„ุŒ ูƒู„ ุนู…ู„ูŠุฉ ุจุชุนู…ู„ู‡ุง ุจุชุชุญุท ููŠ stack ุงู„ู€ Undo. ู„ู…ุง ุจุชุฏูˆุณ UndoุŒ ุจูŠุนู…ู„ Pop() ู„ุขุฎุฑ ุนู…ู„ูŠุฉ.
  • ุงู„ู€ Back Button in Browsers: ูƒู„ ุตูุญุฉ ุจุชุฒูˆุฑู‡ุง ุจุชุชุญุท ููŠ stack. ู„ู…ุง ุจุชุฏูˆุณ BackุŒ ุจูŠุนู…ู„ Pop() ู„ุขุฎุฑ ุตูุญุฉ.
  • ุงู„ู€ Function Call Stack: ู„ุบุงุช ุงู„ุจุฑู…ุฌุฉ ู†ูุณู‡ุง ุจุชุณุชุฎุฏู… stack ุนุดุงู† ุชุฏูŠุฑ ุงุณุชุฏุนุงุก ุงู„ู€ functions.
  • ุงู„ู€ Expression Evaluation: ููŠ ุชุญูˆูŠู„ ุฃูˆ ุญุณุงุจ ุงู„ุชุนุจูŠุฑุงุช ุงู„ุฑูŠุงุถูŠุฉ (like Infix to Postfix).

ู†ุตูŠุญุฉ: ุฒูŠ ุจุงู‚ูŠ ุงู„ู€ Non-Generic CollectionsุŒ ูŠููุถู„ ุงุณุชุฎุฏุงู… ุงู„ู†ุณุฎุฉ ุงู„ู€ Generic ูˆู‡ูŠ Stack<T> ููŠ ุงู„ุฃูƒูˆุงุฏ ุงู„ุญุฏูŠุซุฉ ุนุดุงู† ุชุณุชููŠุฏ ู…ู† ุงู„ู€ type safety ูˆุงู„ุฃุฏุงุก ุงู„ุฃูุถู„.