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;
}
Метод IsFull()
возвращает логическое значение true
, если стек заполнен, а иначе — логическое значение false
. Метод IsEmpty()
возвращает логическое значение true
, если стек пуст, а иначе — логическое значение false
. Для получения общей емкости стека (т.е. общего числа элементов, которые могут в нем храниться) достаточно вызвать метод Capacity(),
а для получения количества элементов, хранящихся в настоящий момент в стеке, — метод GetNum().
Польза этих методов состоит в том, что для получения информации, которую они предоставляют, требуется доступ к закрытой переменной tos
. Кроме того, они служат наглядными примерами организации безопасного доступа к закрытым членам класса с помощью открытых методов.
Конкретное применение класса Stack
для реализации стека демонстрируется в приведенной ниже программе.
// Продемонстрировать применение класса Stack,
using System;
// Класс для хранения символов в стеке.
class Stack {
// Эти члены класса являются закрытыми,
char[] stck; // массив, содержащий стек
int tos; // индекс вершины стека
// Построить пустой класс Stack для реализации стека заданного размера,
public Stack(int size) {
stck = new char[size]; // распределить память для стека
tos = 0;
}
// Поместить символы в стек,
public void Push(char ch) {
if(tos==stck.Length) {
Console.WriteLine(" - Стек заполнен.");
return;
}
stck[tos] = ch;
tos++;
}
// Извлечь символ из стека,
public char Pop() {
if(tos==0) {
Console.WriteLine(" - Стек пуст.");
return (char) 0;
}
tos-- ;
return stck[tos];
}
// Возвратить значение true, если стек заполнен,
public bool IsFull() {
return tos==stck.Length;
}
// Возвратить значение true, если стек пуст,
public bool IsEmpty() {
return tos==0;
}
// Возвратить общую емкость стека,
public int Capacity() {