Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
гавно для печати.docx
Скачиваний:
12
Добавлен:
21.09.2019
Размер:
171.17 Кб
Скачать

23. Понятие стека. Класс «Стек из символов», его основные методы.

Стек — динамическая структура данных, представляющая из себя упорядоченный набор элементов, в которой добавление новых элементов и удаление существующих производится с одного конца, называемого вершиной стека.По определению, элементы извлекаются из стека в порядке, обратном их добавлению в эту структуру, т.е. действует принцип "последний пришёл — первый ушёл".

Наиболее наглядным примером организации стека служит детская пирамидка, где добавление и снятие колец осуществляется как раз согласно определению стека.

Стек можно организовать на базе любой структуры данных, где возможно хранение нескольких однотипных элементов и где можно реализовать определение стека: линейный массив, типизированный файл, однонаправленный или двунаправленный список. В нашем случае наиболее подходящим для реализации стека является однонаправленный список, причём в качестве вершины стека выберем начало этого списка.

Выделим типовые операции над стеком и его элементами: 1) добавление элемента в стек; 2) удаление элемента из стека; 3) проверка, пуст ли стек; 4) просмотр элемента в вершине стека без удаления; 5) очистка стека.

24. Перегрузка операторов. Перегрузка бинарных, унарных и операторов отношений.

Перегрузка операторов. C# позволяет определить значение оператора относит. создаваемого класса. Этот пр-с наз. перегрузкой оператора. Перегружая оператор мы расширяем его использование для класса. Перегрузки операторов тесно связаны с перегрузкой методов. Для перегрузки операторов исп-тся ключ. слово operator, позвол-е сделать операторный метод, кот. определяет действие оператора, связанное с его классом. Можно перегружать унарные и бинарные операции. Общий формат перегр.ун.опер-ра: public static тип возвр.знач operator <знак операции>(тип операнда) { //операция } Общий формат перегр.бин.опер-ра: public static тип возвр.знач operator <знак операции >(тип и имя операнда 1, тип и имя операнда 2) { //операция }

Если в один проект собрать модули, напис. на разных языках, то перегрузка операторов не будет работать. Выход – каждому перегруженному оператору создать аналог. обычный метод. public static Point AddPoint (Point T1, Point T2)

{ return new Point (T1.x+T2.x, T1.y+T2.y); }

public static Point SSubtractPoints (T1.x+T2.x, T1.y+T2.y);

{ return new Point ( T1.x-T2.x, T1.y-T2.y); }

Перегрузка ун.опер-ров для Point: public static Point operator-(Point Ob) { return new Point(-Ob.x,Ob.y); в Main(): T2=-T2; T2.Show();

Перегрузка оператора сравнения.

Перегрузим метод System Object Equals(): public override bool Equals (object 0) { if ((Point)0).x = = this.x && ((Point)0).y = = this.y) return true;

else return false; } public override int GetflashCode()

{ return this toString().GetHashCode(); }

public static bool Operator = = (Point T1, Point T2)

{ return T1.Equals(T2); }

// перегрузка // public static bool Operator ! = (Point T1, Point T2)

{ return ! T1. Equals(T2); }

Опер-ры отношений объектов класса нужно перег-ть только парами: < и >, <= и >=, = и !=.