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


Автор: yorgan 6.6.2008, 10:44
Добавление в конец списка:

void list::add(int d)
{
    Node *pv = new Node(d);
    if (pbeg == 0)
    pbeg=pend=pv;
    else
    {
       pv -> prev = pend;
       pend -> next = pv;
       pend = pv;
    }
}

А как сделать добавление в начало списка?

Автор: bronislav 6.6.2008, 10:59
А код класса list в студию?

Автор: yorgan 6.6.2008, 11:12
Код

class List
{
   class Node
   {
     public:
                int d;
                Node *next; // указатель на последний узел
                Node *prev; // указатель на предыдущий узел
                Node(int dat=0)
                {
                   d = dat; next = 0; prev = 0;
                }
   };
Node *pbeg, *pend; // Указатели на начало и конец списка
public:
           List()
           {
              pbeg=pend=0;
            }
           ~List;
           void add(int d);
.......
};

Автор: Rififi 6.6.2008, 11:29
Цитата(yorgan @  6.6.2008,  10:44 Найти цитируемый пост)
А как сделать добавление в начало списка? 

По аналогии, "инверсией" кода

pv -> next = pbeg;
pbeg -> prev = pv;
pbeg = pv;


Автор: yorgan 6.6.2008, 11:32
Спасибо!

Автор: yorgan 6.6.2008, 11:48
Еще такой вопрос. Как будет извлечение узла из начала и конца списка и вывод количества элементов на экран?

Автор: voov 6.6.2008, 17:30
удаление первого
Код

void list::removeFirst()
{
    if (pbeg == 0) return;

    if (pbeg == pend) {
       delete pbeg;
       pbeg = pend = 0;
    } else {
       Node* pv = pbeg->next;
       pv->prev = 0;
       delete pbeg;
       pbeg = pv;
    }
}

удаление последнего
Код

void list::removeLast()
{
    if (pend == 0) return;

    if (pbeg == pend) {
       delete pend;
       pbeg = pend = 0;
    } else {
       Node* pv = pend->prev;
       pv->next = 0;
       delete pend;
       pend = pv;
    }
}

подсчет кол-ва
Код

int list::getCount()
{
    int count = 0;

    if (pend == 0) return count;

    Node* pv = pbeg;
    while (pv != 0) {
       count++;
       pv = pv->next;
    }

    return count;
}

Автор: yorgan 8.6.2008, 14:09
Спасибо!

Автор: bsa 9.6.2008, 12:37
yorgan, стандартный шаблон двусвязного списка (std::list) использовать нельзя?

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