2. Разработка общего представления линейного списка для обеспечения списковой структуры хранения.
Значения представлены в виде объектов классов, являющихся производными из одного общего базового класса.
В поле значения звена списка размещается указатель на объект значение.
- pFirst – указатель на первое звено списка
- pLast – указатель на последнее звено списка
- pCurrLink – указатель на текущее звено списка
- pPrevLink – указатель на звено, предшествующее текущему
- CurrPos – номер текущего звена
- ListLen – количество звеньев в списке
Для повышения общности схемы реализации будем использовать вместо величины NULL константу pStop для фиксации ситуаций, в которых указатель не содержит адрес какого-либо звена списка.
Информационные методы:
- IsEmpty – проверить, не является ли список пустым
- GetListLength – получить количество звеньев списка
Методы доступа к значениям в списке:
- GetDatValue – получить указатель на значение из звена списка
- обращение возможно только к первому (FIRST), текущему (CURRENT) или последнему звеньям списка (LAST)
- желаемый вариант доступа задается через параметр метода
Методы навигации по списку (итератор):
- Reset – установить текущую позицию на первое звено
- GoNext – переместить текущую позицию на звено вправо
- IsListEnded – проверка завершения списка
- под ситуацией завершения списка понимается состояние после применения GoNext для текущей позиции, установленной на последнем звене списка, т.е. когда pPrevLink=pLast, pCurrLink=pStop
- GetCurrentPos – получить номер текущего звена, SetCurrentPos – установить текущую позицию на звено с заданным номером
Вставка звеньев:
- InsFirst – вставить звено перед первым звеном списка
- InsLast – вставить звено после последнего звена
- InsCurrent – вставить звено перед текущим звеном списка
- При выполнении операций вставки звеньев следует учитывать, что список может быть пустым
- После выполнения вставки необходимо обеспечить корректность значений указателей первого, текущего и последнего звеньев списка
- При корректировке указателей следует учитывать возможность различного положения текущей позиции списка
- текущая позиция является первым звеном (pCurrLink=pFirst)
- текущая позиция является вторым звеном (pPrevLink=pFirst)
- текущая позиция находится внутри списка
- текущая позиция является последним звеном (pCurrLink=pLast)
- текущая позиция выходит за пределы списка (pPrevLink=pLast)
Удаление звеньев:
- DelFirst – удалить первое звено списка
- DelCurrent – удалить текущее звено
- DelList – удалить список