Несмотря на то что для реализации стека достаточно методов Push и Pop , полезными могут оказаться и другие методы. Поэтому в классе Stack определены еще четыре метода: IsFull , IsEmpty , Capacity и GetNum . Эти методы предоставляют всю необходимую информацию о состоянии стека и приведены ниже.
return tos;
}
Метод IsFull возвращает логическое значение true, если стек заполнен, а иначе — логическое значение false. Метод IsEmpty возвращает логическое значение true, если стек пуст, а иначе — логическое значение false. Для получения общей емкости стека (т.е. общего числа элементов, которые могут в нем храниться) достаточно вызвать методCapacity, а для получения количества элементов, хранящихся в настоящий момент в стеке, — методGet Num . Польза этих методов состоит в том, что для получения информации, которую они предоставляют, требуется доступ к закрытой переменной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 IsFullO { return tos==stck.Length;
}
// Возвратить значение true, если- стек пуст, public bool IsEmptyO {
return tos==0;
}
// Возвратить общую емкость стека, public int Capacity {
return stck.Length;
}
// Возвратить количество объектов, находящихся в данный момент в стеке, public int GetNum { return tos;
}
}
class StackDemo {
static void Main {
Stack stkl = new Stack (10);
Stack stk2 = new Stack(lO);
Stack stk3 = new Stack(10);
char ch; int i;
// Поместить ряд символов в стек stkl.
Console.WriteLine("Поместить символы А-J в стек stkl."); for(i=0; !stkl.IsFull; i++) stkl.Push((char) ('A1 + i));