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


Циклический список


Циклический список организован в соответствии с принятым принципом совмещения заголовка списка и его элементов в объектах одного класса. Первый элемент списка - текущий объект, доступный через this , является заголовком и не содержит данных. Остальные элементы - динамические, создаются при помещении в список новых данных и удаляются при их исключении.


class zlist
{
void *data;
zlist *next,*prev;
zlist *find(int); // Вспомогательный метод извлечения


public: // элемента списка по номеру


zlist(); // Конструктор пустого списка


~zlist(); //


int size(); // Количество элементов


void *operator[](int); // Извлечение


void operator()(void*,int); // Включение по номеру


void *remove(int); // Удаление по номеру


void *remove(void*); // Удаление по указателю на элемент данных


void *min( int(*)(void*,void*)); // Итератор поиска минимального


};

Конструктор списка определяет текущий объект как единственный элемент, который в соответствии с правилами построения циклического списка "замкнут сам на себя".


zlist::zlist()
{ prev=next=this; }

На вспомогательном методе извлечения элемента списка по его последовательному номеру можно увидеть все особенности объектно-ориентированной реализации. Первый элемент списка-заголовок является текущим объектом ( this ), при этом в процессе "счета" он не учитывается. Цикл просмотра начинается с первого информационного элемента ( this-&#62next или next ) и завершается по возвращении на заголовок. В последнем случае логический номер не найден.


zlist *zlist::find(int n=-1)
{ zlist *p;
for (p=next; n!=0 &#38&#38 p!=this; n--, p=p-&#62next);
return p; }

Метод подсчета количества элементов в структуре данных стандартным образом обходит циклический список .


int zlist::size()
{ int n; zlist *p;
for (n=0, p=next; p!=this; n++, p=p-&#62next);
return n; }

Метод получения указателя на элемент данных по логическому номеру - переопределенная операция [ ] . Получает указатель на элемент списка при помощи внутреннего метода find и выделяет из него данные .




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



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