Стек C# с примерами Push & Pop
⚡ Умное резюме
В C# стек — это коллекция из пространства имен System.Collections, которая следует принципу «последний вошел — первый вышел» (LIFO), где метод Push добавляет элемент в начало, а метод Pop удаляет его.

Что такое стек в C#?
Стек — это особый набор случаев, который представляет собой концепцию «последним пришел — первым вышел» (LIFO). Чтобы сначала понять LIFO, давайте рассмотрим пример. Представьте себе стопку книг, каждая из которых лежит друг на друге.
В случае с книгами принцип «последним пришел — первым вышел» означает, что из стопки книг можно удалить только самую верхнюю книгу. Невозможно удалить книгу из промежутка, потому что это нарушит настройку стопки.
Отсюда в C#, стек работает таким же образом. Элементы добавляются в стек один поверх другого. Процесс добавления элемента в стек называется операцией push. Чтобы удалить элемент из стека, вы также можете удалить самый верхний элемент стека. Эта операция известна как pop.
Давайте рассмотрим операции, доступные для коллекции Stack, более подробно.
Объявление стека
Стек создается с помощью типа данных Stack. Ключевое слово «new» используется для создания объекта стека. Затем объект присваивается переменной st.
Stack st = new Stack()
Добавление элементов в стек
Метод push используется для добавления элемента в стек. Общий синтаксис оператора приведен ниже.
Stack.push(element)
Удаление элементов из стека
Метод pop используется для удаления элемента из стека. Операция pop вернет самый верхний элемент стека. Общий синтаксис оператора приведен ниже.
Stack.pop()
Количество
Это свойство используется для получения количества элементов в стеке. Ниже приведен общий синтаксис этого оператора.
Stack.Count
Комплект
Этот метод используется для проверки наличия элемента в стеке. Ниже приведен общий синтаксис этого оператора. Оператор вернет true, если элемент существует, в противном случае он вернет значение false.
Stack.Contains(element)
Теперь давайте посмотрим, как это работает на уровне кода. Весь приведенный ниже код будет записан в нашу Консольное приложение. Код будет записан в наш файл Program.cs.
В приведенной ниже программе мы напишем код, чтобы увидеть, как мы можем использовать вышеупомянутые методы.
Пример 1: Метод Stack.Push()
В этом примере мы увидим
- Как создается стек.
- Как отображать элементы стека и использовать методы Count и Contain.
using System; using System.Collections; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace DemoApplication { class Program { static void Main(string[] args) { Stack st = new Stack(); st.Push(1); st.Push(2); st.Push(3); foreach (Object obj in st) { Console.WriteLine(obj); } Console.WriteLine(); Console.WriteLine(); Console.WriteLine("The number of elements in the stack " +st.Count); Console.WriteLine("Does the stack contain the elements 3 "+st.Contains(3)); Console.ReadKey(); } } }
Code Объяснение:-
- Первый шаг используется для объявления стека. Здесь мы объявляем «st» как переменную для хранения элементов нашего стека.
- Затем мы добавляем в наш стек 3 элемента. Каждый элемент добавляется с помощью метода Push.
- Теперь, поскольку к элементам стека нельзя получить доступ через позицию индекса, например список массивов, нам нужно использовать другой подход для отображения элементов стека. Объект (obj) — это временная переменная, объявленная для хранения каждого элемента стека. Затем мы используем оператор foreach для просмотра каждого элемента стека. Для каждого элемента стека значение присваивается переменной obj. Затем мы используем команду Console.Writeline для отображения значения на консоли.
- Мы используем свойство Count (количество ул.), чтобы получить количество элементов в стеке. Это свойство вернет число. Затем мы отображаем это значение на консоли.
- Затем мы используем метод contains, чтобы проверить, присутствует ли значение 3 в нашем стеке. Это вернет либо истинное, либо ложное значение. Затем мы отображаем это возвращаемое значение на консоли.
Если приведенный выше код введен правильно и программа запущена, будет отображен следующий вывод.
Выход:
Из вывода мы видим, что отображаются элементы стека. Кроме того, отображается значение True, означающее, что значение 3 определено в стеке.
Внимание: Вы заметили, что первым отображается последний элемент, помещенный в стек. Это самый верхний элемент стека. В выходных данных также отображается количество элементов стека.
Пример 2: Метод Stack.Pop()
Теперь давайте посмотрим на функцию «удалить». Мы увидим код, необходимый для удаления самого верхнего элемента из стека.
using System; using System.Collections; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace DemoApplication { class Program { static void Main(string[] args) { Stack st = new Stack(); st.Push(1); st.Push(2); st.Push(3); st.Pop(); foreach (Object obj in st) { Console.WriteLine(obj); } Console.ReadKey(); } } }
Code Объяснение:-
- Здесь мы просто вызываем метод pop, который используется для удаления элемента из стека.
Если приведенный выше код введен правильно и программа запущена, будет отображен следующий вывод.
Выход:
Мы видим, что элемент 3 был удален из стека.
Метод `StakePeek()` в C#
Методы Push и Pop работают с верхним элементом стека, но иногда нужно посмотреть только на верхний элемент, не удаляя его. Метод Peek делает именно это. Он возвращает самое верхнее значение стека, оставляя коллекцию неизменной, что полезно, когда нужно проверить следующий элемент, прежде чем принимать решение о его удалении.
Шаг 1) Создайте стек и поместите в него три элемента так, чтобы значение 3 оказалось сверху.
Шаг 2) Вызовите метод Peek, чтобы прочитать верхний элемент, затем проверьте свойство Count, чтобы убедиться, что ничего не было удалено.
using System; using System.Collections; namespace DemoApplication { class Program { static void Main(string[] args) { Stack st = new Stack(); st.Push(1); st.Push(2); st.Push(3); Console.WriteLine(st.Peek()); Console.WriteLine(st.Count); Console.ReadKey(); } } }
Code Объяснение:-
- Объявлен стек с именем st, и значения 1, 2 и 3 складываются с помощью метода Push, так что 3 становится самым верхним элементом.
- Метод Peek возвращает верхний элемент, не удаляя его, а свойство Count по-прежнему отображает полное количество элементов в стеке.
При запуске программа выводит значение на экран. 3 от Пика, а затем от графа 3Это доказывает, что элемент остаётся в стеке. Если стек пуст, Peek выдаёт исключение Invalid.OperaПоскольку возникает исключение tionException, перед вызовом функции безопасно проверить значение Count.
Универсальный стек на C#
В приведенных выше примерах используется негенерический класс Stack из System.Collections, который хранит каждый элемент как объект. Современный код на C# обычно предпочитает использовать генерический класс Stack. Класс из пространства имен System.Collections.Generic. Он привязывает стек к одному объявленному типу, поэтому компилятор проверяет каждое добавление и удаление элемента, и приведение типов или упаковка не требуются.
Основные преимущества универсального стека перечислены ниже.
- Тип безопасности: Тип данных фиксируется при объявлении, поэтому в переменные можно добавлять только значения этого типа, а ошибки выявляются на этапе компиляции.
- Без бокса: Типы значений, такие как int, хранятся напрямую, что позволяет избежать затрат на упаковку, которые несет негенерический Stack.
- Читает уборщик: Функции Pop и Peek возвращают непосредственно объявленный тип, поэтому вам не нужно приводить результат обратно из типа объекта.
using System; using System.Collections.Generic; namespace DemoApplication { class Program { static void Main(string[] args) { Stack<string> st = new Stack<string>(); st.Push("Java"); st.Push("Python"); Console.WriteLine(st.Pop()); Console.ReadKey(); } } }
В этом примере стек объявлен как Stack. Таким образом, он принимает только строковые значения. Метод Pop возвращает строку напрямую и выводит её на экран. PythonПоследнее добавленное значение. Для любого нового проекта используется универсальный стек. Это рекомендуемый выбор.
Разница между стеком и очередью в C#
Стопка и очередь Оба типа коллекций контролируют порядок удаления элементов, но используют противоположные правила. В стеке действует принцип «последний вошел — первый вышел», а в очереди — «первый вошел — первый вышел». Выбор правильного типа коллекции позволяет другим разработчикам понять назначение вашего кода.
Основные различия перечислены ниже:
- Порядок: В стеке сначала удаляется самый недавно добавленный элемент (LIFO), а в очереди сначала удаляется самый старый элемент (FIFO).
- Методы: В стеке используются методы Push и Pop, тогда как в очереди для добавления используется Enqueue, а для удаления — Dequeue.
- Доступ к верхнему элементу: Стек считывает свой следующий элемент с помощью функции Peek, а очередь считывает свой следующий элемент с помощью функции Peek с начала очереди.
- Типичное использование: Стеки соответствуют функциям отмены действий, вычислениям выражений и рекурсии. tracкороль, в то время как очереди подходят для планирования, буферизации и обхода в ширину.
Оба типа доступны в обобщенном виде как Stack. и очередь в System.Collections.Generic, поэтому при любом выборе вы получаете типобезопасность.




