Основы программирования. Динамические массивы. Списки. Ассоциативные массивы. Деревья. Хеш-таблицы - 15 стр.

UptoLike

Составители: 

17
procedure AddLast(x: DataType);
procedure DeleteFirst;
procedure DeleteLast;
function IsEmpty: boolean;
// Вспомогательные методы
function First: DataType; // первый элемент
function Last: DataType; // последний элемент
// преобразование содержимого списка в строку
function ToString: Ansistring;
function Find(x: DataType): boolean; // есть ли x
procedure Remove(x: DataType); // удалить все x
// Методы, реализующие внутренний итератор
property Current: DataType read GetData
write SetData; // значение текущего элемента
procedure MoveFirst; // итератор - на начало
procedure MoveLast; // итератор - на конец
procedure Next; //итератор - на следующий элемент
procedure Prev;//итератор - на предыдущий элемент
function Eol: boolean; // конец списка?
// Если Eol=True, то текущий элемент не определен
public
// Вставка и удаление в позиции внутреннего итератора
// вставка в позиции перед итератором
procedure InsertBefore(x: DataType);
// вставка в позиции после итератора
procedure InsertAfter(x: DataType);
procedure Delete; // удаление в позиции итератора
end
;
Действие методов понятно из комментариев. Единственный вопрос, который
следует пояснить, – как ведет себя указатель на текущий элемент при операциях
вставки и удаления. Этот вопрос может решаться по-разному. В данной реализа-
ции принято следующее решение. При любых операциях вставки указатель на те-
кущий элемент не изменяется. При удалении текущего элемента
указатель на те-
кущий перемещается на следующий элемент, а если он отсутствует, то на преды-
дущий. Если же после удаления элемента список становится пустым, то указатель
на текущий элемент получает значение nil. Тем самым внутренний итератор
продолжает указывать на какой-то элемент списка «до последнего».
Отметим, что наш класс имеет «
жирный» интерфейс. Это означает, что в его
интерфейсе содержится множество методов, которые можно разбить на группы,
каждая из которых взаимодействует не со всеми, а лишь с подмножеством полей
класса. Например, методы, реализующие внутренний итератор, взаимодействуют
только с полем cur и не затрагивают остальные поля.