Объектно-ориентированный язык программирования С++ в примерах. Сивохин А.В. - 59 стр.

UptoLike

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

ссылаются элементы,списки бывают однородные и неоднородные.
Определим универсальный указатель:
typedef void* ent;
Элемент списка определим как класс с двумя дружественными
классами:список и оператор списка,которые определим позже:
class slink /*-элемент односвязного списка: */
{ /* ┌───────┐ */
/* next ├──Ў next Ў */
/* ├───────┤ */
/* e e */
/* └───┬───┘ */
/* */
/* · · */
/* */
friend class slist; /*-дружественные */
friend class slist_iterator;/* классы; */
slink* next; /*-на последующий элемент; */
ent e; /*-указатель поля данных; */
slink(ent a, slink* p) /*-конструктор звена; */
{ e=a; next=p; }
};/*-конец определения односвязного списка; */
Обратите внимание,что все члены класса,в том числе и его
конструктор,являются личными private.
Циклический односвязный список с одним фиксатором и четырь-
мя операциями:включить в начало,добавить в конец,выбрать с
удалением и очистить - определим следующим образом:
class slist /*-циклический односвязный список: */
{ friend class slist_iterator;/*дружественный класс;*/
slink* last;/*-фиксатор списка,определяющий */
/* его последний элемент; */
public:
int insert(ent a);/*-включить элемент в начало*/
int append(ent a);/*-добавить элемент в конец;*/
59
ссылаются элементы,списки бывают однородные и неоднородные.
  Определим универсальный указатель:


  typedef void* ent;


  Элемент списка определим как класс с двумя дружественными
классами:список и оператор списка,которые определим позже:


  class slink /*-элемент односвязного списка:                     */
        {       /* ┌───────┐         ┌ ─ ─ ─ ┐                    */
                /* │     next ├──Ў      next     ─ ─ Ў            */
                /* ├───────┤         ├ ─ ─ ─ ┤                    */
                /* │     e   │         e                          */
                /* └───┬───┘       └ ─ ┬ ─ ┘                      */
                /*       │                                        */
                /*       ·              ·                         */
                /*                                                */
            friend class slist;                /*-дружественные   */
            friend class slist_iterator;/* классы;                */
                slink* next; /*-на последующий элемент;           */
                ent e;           /*-указатель поля данных;        */
                slink(ent a, slink* p) /*-конструктор звена;      */
                       { e=a; next=p; }
        };/*-конец определения односвязного списка;               */


  Обратите внимание,что все члены класса,в том числе и его
конструктор,являются личными private.
  Циклический односвязный список с одним фиксатором и четырь-
мя операциями:включить в начало,добавить в конец,выбрать с
удалением и очистить - определим следующим образом:


  class slist /*-циклический односвязный список:                  */
        { friend class slist_iterator;/*дружественный класс;*/
                slink* last;/*-фиксатор списка,определяющий       */
                              /* его последний элемент;           */
            public:
                int insert(ent a);/*-включить элемент в начало*/
                int append(ent a);/*-добавить элемент в конец;*/
                                  59