Добавить в цитаты Настройки чтения

Страница 469 из 502

Метод - Описание

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

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

public void Push(T item) - Помещает элемент item в стек

Public T[] ToArray() - Возвращает массив, содержащий копии элементов вызывающего стека

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

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

<b>// Продемонстрировать применение класса Stack&lt;T&gt;.</b>

<b>using System;</b>

<b>using System.Collections.Generic;</b>

<b>class GenStackDemo {</b>

<b>  static void Main() {</b>

<b>    Stack&lt;string&gt; st = new Stack&lt;string&gt;();</b>

<b>    st.Push(&quot;один&quot;);</b>

<b>    st.Push(&quot;два&quot;);</b>

<b>    st.Push(&quot;три&quot;);</b>

<b>    st.Push(&quot;четыре&quot;);</b>

<b>    st.Push(&quot;пять&quot;);</b>

<b>    while(st.Count &gt; 0) {</b>

<b>      string str = st.Pop();</b>

<b>      Console.Write(str + &quot; &quot;);</b>

<b>    }</b>

<b>    Console.WriteLine();</b><b>  }</b>

<b>}</b>

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

<b>пять четыре три два один</b>

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

<b>public Queue()</b>

<b>public Queue(int capacity)</b>

<b>public Queue(IEnumerable&lt;T&gt; collection)</b>

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

В классе Queue&lt;T&gt; определяется ряд собственных методов, помимо тех, что уже объявлены в интерфейсах, которые в нем реализуются, а также в интерфейсе ICollection&lt;T&gt;. Некоторые из наиболее часто используемых методов этого класса перечислены в табл.25.21. Как и в классе Queue, эти методы обычно применяются следующим образом. Для того чтобы поместить объект в очередь, вызывается метод Enqueue(). Если требуется извлечь и удалить первый объект из начала очереди, то вызывается метод Dequeue(). Если же требуется извлечь, но не удалять следующий объект из очереди, то вызывается метод Реек(). А если методы Dequeue() и Реек() вызываются, когда очередь пуста, то генерируется исключение InvalidOperationException.

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

Метод -  Описание

public T Dequeue() - Возвращает объект из начала вызывающей    очереди. Возвращаемый объект удаляется из очереди

public void Enqueue (Т item) -  Добавляет элемент item в конец очереди

public T Реек() - Возвращает элемент из начала вызывающей очере_ди, но не удаляет его

public virtual Т[] ToArray() - Возвращает массив, который содержит копии элементов из вызывающей очереди

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

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

<b>// Продемонстрировать применение класса Queue&lt;T&gt;.</b>

<b>using System;</b>

<b>using System.Collections.Generic;</b>

<b>class GenQueueDemo {</b>

<b>  static void Main() {</b>

<b>    Queue&lt;double&gt; q = new Queue&lt;double&gt;();</b>

<b>    q.Enqueue(98.6);</b>

<b>    q.Enqueue(212.0);</b>

<b>    q.Enqueue(32.0);</b>

<b>    q.Enqueue(3.1416);</b>