Стек (stack) - це контейнер, який працює за принципом "останній увійшов, перший вийшов" (last in, first out - LIFO). На малюнку показано виставу стека, де метод Push () додає елемент, а метод Pop () - отримує елемент, доданий останнім:
Клас колекції, що підтримує стек, носить назву Stack. У ньому реалізуються інтерфейси ICollection, IEnumerable і ICloneable. Цей клас створює динамічну колекцію, яка розширюється в міру потреби зберігати в ній вводяться елементи. Всякий раз, коли ви хочете покращити таку колекцію, її ємність збільшується вдвічі.
У класі Stack визначаються наступні конструктори:
У першій формі конструктора створюється порожній стек, в другій формі - порожній стек, початковий розмір якого визначає первісна ємність, що задається параметром initialCapacity, і в третій формі - стек, що містить елементи, про яку йдеться колекції col. Його первісна ємність дорівнює кількості зазначених елементів.
У класі Stack визначається ряд власних методів, крім тих, що вже оголошені в інтерфейсах, які в ньому реалізуються. Деякі з найбільш часто використовуваних методів цього класу наведено нижче. Ці методи зазвичай застосовуються в такий спосіб. Для того щоб помістити об'єкт на вершині стека, викликається метод Push (). А для того щоб витягти і видалити об'єкт з вершини стека, викликається метод Pop (). Якщо ж об'єкт потрібно тільки витягти, але не видалити з вершини стека, то викликається метод Peek (). А якщо викликати метод Pop () або Peek (), коли викликає стек порожній, то згенерує виняток InvalidOperationException.
клас Stack
Властивість Count повертає кількість елементів в стеку.
Метод Push () додає елемент в вершину стека.
Метод Pop () видаляє і повертає елемент з вершини стека. Якщо стек порожній, генерується виключення типу InvalidOperationException.
Метод Peek () повертає елемент з вершини стека, не видаляючи його при цьому.
Метод Contains () перевіряє наявність елемента в стек і повертає true у випадку знаходження його там.
Давайте розглянемо приклад: