В первой форме конструктора создается пустой стек, во второй форме — пустой стек, первоначальный размер которого определяет первоначальная емкость, задаваемая параметром initialCapacity, ив третьей форме — стек, содержащий элементы указываемой коллекции col. Его первоначальная емкость равна количеству указанных элементов.
В классе Stack
определяется ряд собственных методов, помимо тех, что уже объявлены в интерфейсах, которые в нем реализуются. Некоторые из наиболее часто используемых методов этого класса приведены в табл. 25.7. Эти методы обычно применяются следующим образом. Для того чтобы поместить объект на вершине стека, вызывается метод Push()
. А для того чтобы извлечь и удалить объект из вершины стека, вызывается метод Pop()
. Если же объект требуется только извлечь, но не удалить из вершины стека, то вызывается метод Реек()
. А если вызвать метод Pop()
или Реек()
, когда вызывающий стек пуст, то сгенерируется исключение InvalidOperationException
.
Таблица 25.7. Наиболее часто используемые методы, определенные в классе Stack
Метод - Описание
public virtual void Clear() -Устанавливает свойство Countравным нулю, очищая, по существу, стек
public virtual bool Contains (object obj) - Возвращает логическое значение true,если объект obj содержится в вызывающем стеке, а иначе — логическое значение false
public virtual object Peek() - Возвращает элемент, находящийся на вершине стека, но не удаляет его
public virtual object Pop() -Возвращает элемент, находящийся на вершине стека, удаляя его по ходу дела
public virtual void Push (object obj) - Помещает объект obj в стек
public static Stack Synchronized(Stack stack) - Возвращает синхронизированный вариант коллекции типа Stack,передаваемой в качестве параметра stack
public virtual object[] ToArray() -Возвращает массив, содержащий копии элементов вызывающего стека
В приведенном ниже примере программы создается стек, в который помещается несколько целых значений, а затем они извлекаются обратно из стека.
// Продемонстрировать применение класса Stack.
using System;
using System.Collections;
class StackDemo {
static void ShowPush(Stack st, int a) {
st.Push(a);
Console.WriteLine("Поместить в стек: Push(" + a + ")");
Console.Write("Содержимое стека: ");
foreach(int i in st)
Console.Write(i + " ");
Console.WriteLine();
}
static void ShowPop(Stack st) {
Console.Write("Извлечь из стека: Pop -> ");
int a = (int) st.Pop();
Console.WriteLine(а);
Console.Write("Содержимое стека: ");
foreach(int i in st)
Console.Write(i + " ");
Console.WriteLine();
}
static void Main() {
Stack st = new Stack();
foreach(int i in st)
Console.Write(i + " ");
Console.WriteLine();
ShowPush(st, 22);
ShowPush(st, 65);
ShowPush(st, 91);
ShowPop(st);
ShowPop(st);
ShowPop(st) ;
try {
ShowPop(st) ;
} catch (InvalidOperationException) {
Console.WriteLine("Стек пуст.");
}
}
}
Ниже приведен результат выполнения этой программы. Обратите внимание на то, как обрабатывается исключение InvalidOperationException
, генерируемое при попытке извлечь элемент из пустого стека.
Поместить в стек: Push(22)
Содержимое стека: 22
Поместить в стек: Push(65)
Содержимое стека: 65 22
Поместить в стек: Push(91)
Содержимое стека: 91 65 22
Извлечь из стека: Pop -> 91
Содержимое стека: 65 22
Извлечь из стека: Pop -> 65
Содержимое стека: 22
Извлечь из стека: Pop -> 22
Содержимое стека:
Извлечь из стека: Pop -> Стек пуст.
Класс Queue
Еще одной распространейной структурой данных является очередь, действующая по принципу: первым пришел — первым обслужен. Это означает, что первым из очереди извлекается элемент, помещенный в нее первым. Очереди часто встречаются в реальной жизни. Многим из нас нередко приходилось стоять в очередях к кассе в банке, магазине или столовой. В программировании очереди применяются для хранения таких элементов, как процессы, выполняющиеся в данный момент в системе, списки приостановленных транзакций в базе данных или пакеты данных, полученные по Интернету. Кроме того, очереди нередко применяются в области имитационного моделирования.
Читать дальше