Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Для новичков > Шаблоны класса


Автор: shinoby 29.3.2008, 09:53
Как происходит реализация "однонаправленного линейного списка" и "двунаправленного кольцевого списка" (пожалуйста примеры в виде кода и желательно скоментариями для лучшего понимания). Интересны так же все возможные варианты реализации начиная от уровня новичок.  Для каких целей применяется первый и второй вариант.

Автор: comcon1 29.3.2008, 14:29
Вот безитераторный шаблон для однонаправленного списка.
Написал вставку и удаление, остальное лень как-то.. сам допишешь?
Код

template<class T>
class LIST {
 private:
 data_type *first;
 data_type *last;
 public:
 struct data_type {
   T data;
   data_type *next;
   data_type(T dat_, data_type_ *nxt_):
     data(dat_), next(nxt_) {;}
 };
 LIST(): first(0), last(0) {;}
 inline data_type *first() const {return first;}
 inline data_type *last() const {return last;}
 void push_back(T dat_) {
    if (last)
       last->next = new data_type(dat_, NULL);
    else {
       first = new data_type(dat_, NULL);
       last = first;
    }
 }
 void insert(data_type *ptr, T _dat) {
   data_type *elem = new data_type(_dat,ptr->next);
   ptr->next = elem;
 }
 void delete(data_type *ptr) {
   data_type *cur;
   for(cur = first; cur != 0; cur = cur->next) {
     if (cur->next == ptr) break;
   }
   cur->next = ptr->next;
   delete ptr;
 }
};

Автор: shinoby 29.3.2008, 21:59
Цитата(comcon1 @ 29.3.2008,  14:29)


За код большое спасибо, однако хотелось бы понять, что может собой представлять двунаправленный кольцевой список, т.к. реализовывать мне необходимо именно его. Образец программы с однонаправленным я уже отыскал, да и твой пример comcon1 многого стоит, а мог бы ты, хотябы намекнуть, что твориться по другую сторону барикад.

Автор: chipset 29.3.2008, 23:59
примерно такая-же реализация как и сomcon1 только есть ещё prev указатель и соответственно функции по перенаправлению prev/next.

Автор: warmonger_ 31.3.2008, 00:50
Цитата(chipset @  29.3.2008,  22:59 Найти цитируемый пост)
и соответственно функции по перенаправлению prev/next. 

а разве кольцевой список, это не тот, когда последний элемент указывает на первый...

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)