Для стека определены две основные операции:
В рассматриваемом здесь примере создается класс Stack
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() {
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) {