Выбрать главу

public Stack()

public Stack(int capacity)

public Stack(IEnumerable<T> collection)

В первой форме конструктора создается пустой стек с выбираемой по умолчанию первоначальной емкостью, а во второй форме — пустой стек, первоначальный размер которого определяет параметр capaci ty. И в третьей форме создается стек, содержащий элементы коллекции, определяемой параметром collection. Его первоначальная емкость равна количеству указанных элементов.

В классе Stack<T> определяется ряд собственных методов, помимо тех, что уже объявлены в интерфейсах, которые в нем реализуются, а также в интерфейсе ICollection<T>. Некоторые из наиболее часто используемых методов этого класса перечислены в табл. 25.20. Как и в классе Stack, эти методы обычно применяются следующим образом. Для того чтобы поместить объект на вершине стека, вызывается метод Push (). А для того чтобы извлечь и удалить объект из вершины стека, вызывается метод Pop (). Если же объект требуется только извлечь, но не удалить из вершины стека, то вызывается метод Реек (). А если вызвать метод Pop () или Реек (), когда вызывающий стек пуст, то сгенерируется исключение InvalidOperationException.

Таблица 25.20. Методы, определенные в классе Stack<T>

Метод

Описание

public

T Peek()

Возвращает элемент, находящийся на вершине стека, но не удаляет его

public

T Pop()

Возвращает элемент, находящийся на вершине стека, удаляя его в процессе работы

public

void Push(T item)

Помещает элемент i tern в стек

public

T[] ToArrayO

Возвращает массив, содержащий копии элементов вызывающего стека

public

void TrimExcessO

Сокращает избыточную емкость вызывающей коллекции в виде стека

В приведенном ниже примере программы демонстрируется применение класса Stack<T>.

// Продемонстрировать применение класса Stack<T>. using System;

using System.Collections.Generic;

class GenStackDemo { static void Main() {

Stack<string> st = new Stack<string>();

st.Push("один"); st.Push("два"); st.Push("три"); st.Push("четыре"); st.Push("пять");

while(st.Count > 0) { string str = st.Pop();

Console.Write(str + " ");

}

Console.WriteLine ();    '

}

}

При выполнении этой программы получается следующий результат.

пять четыре три два один

Класс Queue<T>

Класс Queue<T> является обобщенным эквивалентом класса необобщенной коллекции Queue. В нем поддерживается очередь в виде списка, действующего по принципу "первым пришел — первым обслужен". В этом классе реализуются интерфейсы ICollection, IEnumerable и IEnumerable<T>. Кроме того, в классе Queue<T> непосредственно реализуются методы Clear (), Contains () и CopyTo (), определенные в интерфейсе ICollection<T>. А методы Add () и Remove () в этом классе не поддерживаются, как, впрочем, и свойство IsReadOnly. Коллекция класса Queue<T> имеет динамический характер, расширяясь по мере необходимости, чтобы вместить все элементы, которые должны храниться в ней. В классе Queue<T> определяются следующие конструкторы.

public Queue()

public Queue(int capacity)

public Queue(IEnumerable<T> collection)

В первой форме конструктора создается пустая очередь с выбираемой по умолчанию первоначальной емкостью, а во второй форме — пустая очередь, первоначальный размер которой определяет параметр capaci ty. И в третьей форме создается очередь, содержащая элементы коллекции, определяемой параметром collection. Ее первоначальная емкость равна количеству указанных элементов.