Оба члена, tosnstck, являются закрытыми, и благодаря этому соблюдается принцип "последним пришел — первым обслужен". Если же разрешить открытый доступ к члену stck, то элементы стека окажутся доступными не по порядку. Кроме того, член tos содержит индекс вершины стека, где находится первый обслуживаемый в стеке элемент, и поэтому манипулирование членом tos в коде, находящемся за пределами класса Stack, следует исключить, чтобы не допустить разрушение самого стека. Но в то же время члены stckntos доступны пользователю класса Stack косвенным образом с помощью различных отрытых методов, описываемых ниже.
Рассмотрим далее конструктор класса Stack.
// Построить пустой класс Stack для реализации стека заданного размера, public Stack(int size) {
stck = new char[size]; // распределить память для стека tos = 0;
}
Этому конструктору передается требуемый размер стека. Он распределяет память для базового массива и устанавливает значение переменной tos в нуль. Следовательно, нулевое значение переменной tos указывает на то, что стек пуст.
Открытый метод Push помещает конкретный элемент в стек, как показано ниже.
// Поместить символы в стек, public void Push(char ch) { if (tos==stck.Length) {
Console.WriteLine(" - Стек заполнен."); return;
}
stck[tos] = ch; tos++;
Элемент, помещаемый в стек, передается данному методу в качестве параметраch.Перед тем как поместить элемент в стек, выполняется проверка на наличие свободного места в базовом массиве, а именно: не превышает ли значение переменнойtosдлину массиваstck.Если свободное место в массивеstckесть, то элемент сохраняется в нем по индексу, хранящемуся в переменнойtos,после чего значение этой переменной инкрементируется. Таким образом, в переменнойtosвсегда хранится индекс следующего свободного элемента массиваstck.
Для извлечения элемента из стека вызывается открытый метод Pop , приведенный ниже.
// Извлечь символ из стека, public char Рор { if(tos==0) {
Console.WriteLine (" - Стек пуст."); return (char) 0;
}
tos — ;
return stck[tos];
}
Вэтом методе сначала проверяется значение переменнойtos.Если оно равно нулю, значит, стек пуст.Впротивном случае значение переменнойtosдекрементируется, и затем из стека возвращается элемент по указанному индексу.