Основы программирования на C#


Абстрактные классы - часть 2


Описание класса содержит только сигнатуры методов класса и их спецификацию, заданную тегами <summary>. Построим теперь одного из потомков этого класса, реализация которого основана на списковом представлении. Класс ListStack будет потомком абстрактного класса Stack и клиентом класса Linkable, задающего элементы списка. Класс Linkable выглядит совсем просто:

public class Linkable { public Linkable() { } public int info; public Linkable next; }

В нем - два поля и конструктор по умолчанию. Построим теперь класс ListStack:

public class ListStack: Stack { public ListStack() { top = new Linkable(); } Linkable top; /// <summary> /// втолкнуть элемент item в стек /// </summary> /// <param name="item"></param> public override void put(int item) { Linkable newitem = new Linkable(); newitem.info = item; newitem.next = top; top = newitem; } /// <summary> /// удалить элемент в вершине стека /// </summary> public override void remove() { top = top.next; } /// <summary> /// прочитать элемент в вершине стека /// </summary> public override int item() { return(top.info); } /// <summary> /// определить, пуст ли стек /// </summary> /// <returns></returns> public override bool IsEmpty() { return(top.next == null); } }

Класс имеет одно поле top класса Linkable и методы, наследованные от абстрактного класса Stack. Теперь, когда задано представление данных, нетрудно написать реализацию операций. Реализация операций традиционна для стеков и, надеюсь, не требует пояснений.

Приведу пример работы со стеком:

public void TestStack() { ListStack stack = new ListStack(); stack.put(7); stack.put(9); Console.WriteLine(stack.item()); stack.remove(); Console.WriteLine(stack.item()); stack.put(11); stack.put(13); Console.WriteLine(stack.item()); stack.remove(); Console.WriteLine(stack.item()); if(!stack.IsEmpty()) stack.remove(); Console.WriteLine(stack.item()); }

В результате работы этого теста будет напечатана следующая последовательность целых: 9, 7, 13, 11, 7.




Начало  Назад  Вперед