return stck.Length;
}
// Возвратить количество объектов, находящихся в данный момент в стеке,
public int GetNum() {
return tos;
}
}
Рассмотрим класс Stackболее подробно. В начале этого класса объявляются две следующие переменные экземпляра.
// Эти члены класса являются закрытыми,
char[] stck; // массив, содержащий стек
int tos; // индекс вершины стека
Массив stckпредоставляет базовые средства для хранения данных в стеке (в данном случае — символов). Обратите внимание на то, что память для этого массива не распределяется. Это делается в конструкторе класса Stack.А член tosданного класса содержит индекс вершины стека.
Оба члена, 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декрементируется, и затем из стека возвращается элемент по указанному индексу.
Несмотря на то что для реализации стека достаточно методов Push()и Pop(),полезными могут оказаться и другие методы. Поэтому в классе Stackопределены еще четыре метода: IsFull(), IsEmpty(), Capacity() и GetNum().Эти методы предоставляют всю необходимую информацию о состоянии стека и приведены ниже.
// Возвратить значение true, если стек заполнен,
public bool IsFull() {
return tos==stck.Length;
}
// Возвратить значение true, если стек пуст,
public bool IsEmpty() {
return tos==0;
}
// Возвратить общую емкость стека,
public int Capacity() {
return stck.Length;
}
// Возвратить количество объектов, находящихся в данный момент в стеке,
public int GetNum() {
return tos;
Читать дальше