Информатика и технология программирования


Циклический список - часть 2



void *zlist::operator[](int n=-1)
{
if (n==-1) n=size()-1;
zlist *p=find(n);
return p==this ? NULL : p-&#62data; }

Метод исключения элемента данных из списка находит прежде всего элемент списка, извлекает из него указатель на элемент данных. Сам элемент списка при этом удаляется, поскольку он является динамическим объектом. Указатель на элемент данных возвращается, поскольку структура данных не несет ответственность за размещение самого элемента данных в памяти и не распределяет память под него.


void *zlist::remove(int n=-1)
{
if (n==-1) n=size()-1; // По умолчанию - удалить последний


zlist *p=find(n); // Найти элемент списка по номеру


if (p==this) return NULL; // Номер не существует - удалить нельзя


void *s=p-&#62data; // Сохранить указатель на данные


p-&#62prev-&#62next=p-&#62next; // "Обойти" элемент двусвязного списка


p-&#62next-&#62prev=p-&#62prev;
p-&#62next=p-&#62prev=p; // Перед удалением - сделать его


delete p; // "единственным"


return s;} // Возвратить указатель на данные

Метод исключения по указателю на элемент данных используется, когда необходимо удалить известный уже элемент данных. Метод ищет заданный указатель и удаляет содержащий его элемент списка.


void *zlist::remove( void *pd)
{
zlist *p= next;
for (; p!=ph; p=p-&#62next)
{
if (p-&#62data==pd)
{
p-&#62prev-&#62next=p-&#62next; // "Обойти" элемент двусвязного списка


p-&#62next-&#62prev=p-&#62prev; //


p-&#62next=p-&#62prev=p; // Перед удалением - сделать его


delete p; // "единственным"


return pd; // Возвратить указатель на данные


}
}
return NULL; }

Метод включения элемента данных по логическом номеру, наоборот, создает динамический объект - элемент списка, после чего включает его в список. Таким образом, элементами списка являются динамические объекты, создаваемые методами, работающими с его заголовком.


void zlist::operator()(void *s,int n=-1)
{ // По умолчанию - включить перед заголовком,




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



Книжный магазин