Керівництво c #, стек класи stack і stack - t

Стек (stack) - це контейнер, який працює за принципом "останній увійшов, перший вийшов" (last in, first out - LIFO). На малюнку показано виставу стека, де метод Push () додає елемент, а метод Pop () - отримує елемент, доданий останнім:

Керівництво c #, стек класи stack і stack - t

Клас колекції, що підтримує стек, носить назву Stack. У ньому реалізуються інтерфейси ICollection, IEnumerable і ICloneable. Цей клас створює динамічну колекцію, яка розширюється в міру потреби зберігати в ній вводяться елементи. Всякий раз, коли ви хочете покращити таку колекцію, її ємність збільшується вдвічі.

У класі Stack визначаються наступні конструктори:

У першій формі конструктора створюється порожній стек, в другій формі - порожній стек, початковий розмір якого визначає первісна ємність, що задається параметром initialCapacity, і в третій формі - стек, що містить елементи, про яку йдеться колекції col. Його первісна ємність дорівнює кількості зазначених елементів.

У класі Stack визначається ряд власних методів, крім тих, що вже оголошені в інтерфейсах, які в ньому реалізуються. Деякі з найбільш часто використовуваних методів цього класу наведено нижче. Ці методи зазвичай застосовуються в такий спосіб. Для того щоб помістити об'єкт на вершині стека, викликається метод Push (). А для того щоб витягти і видалити об'єкт з вершини стека, викликається метод Pop (). Якщо ж об'єкт потрібно тільки витягти, але не видалити з вершини стека, то викликається метод Peek (). А якщо викликати метод Pop () або Peek (), коли викликає стек порожній, то згенерує виняток InvalidOperationException.

клас Stack є узагальненим еквівалентом класу неузагальнених колекції Stack. У ньому підтримується стек у вигляді списку, який діє за принципом "першим прийшов - останнім обслужений". В цьому класі реалізуються інтерфейси Collection, IEnumerable і IEnumerable. Крім того, в класі Stack безпосередньо реалізуються методи Clear (), Contains () і СоруТо (), певні в інтерфейсі ICollection. А методи Add () і Remove () в цьому класі не підтримуються, як, втім, і властивість IsReadOnly. Колекція класу Stack має динамічний характер, розширюючись у міру необхідності, щоб вмістити всі елементи, які повинні в ній зберігатися.

Властивість Count повертає кількість елементів в стеку.

Метод Push () додає елемент в вершину стека.

Метод Pop () видаляє і повертає елемент з вершини стека. Якщо стек порожній, генерується виключення типу InvalidOperationException.

Метод Peek () повертає елемент з вершини стека, не видаляючи його при цьому.

Метод Contains () перевіряє наявність елемента в стек і повертає true у випадку знаходження його там.

Давайте розглянемо приклад: