Не понимаю работу деструктора для графа, который задается массивом указателей на списки

116
21 ноября 2020, 09:50

Снизу класс Grl для графа, функция добавление ребра и сам деструктор. Не понимаю как там указатель E[j] может стать nullptr? Ведь по логике, первая структура будет указывать на следующую и так далее, а последняя на первую, либо я не так понимаю это.

class GrL : public GrA {
public:
    ~GrL();
    bool create(uint n);
    bool addArc(uint, uint);
    VList neighbors(uint v);
protected:
    typedef struct Node { uint v; Node* next; } *PNode, **PPNode;
    PPNode E;
    void dfsr(uint start, VList & L, bool * & visited);
    void bfsc(uint start, VList & L, bool * & visited);
};
bool GrL::addArc(uint i, uint j)
{
    PNode p = new(nothrow) Node;
    if (p == nullptr)
        return false;
    p->v = j;
    p->next = E[i];
    E[i] = p;
    if (!isDir)
    {
        PNode p = new(nothrow) Node;
        if (p == nullptr)
            return false;
        p->v = i;
        p->next = E[j];
        E[j] = p;
    }
    ++m;
    return true;
}
GrL::~GrL()
{
    for (int j = 0; j < n; j++)
    {
        PNode p;
        while (E[j] != nullptr)
        {
            p = E[j];
            E[j] = E[j] ->next;
            delete p;
        }
    }
    delete[]E;
}
Answer 1

А что именно не понимаете?

Нарисуйте на бумаге ячейки массива, и из каждой вниз висит веревочка с бумажными флажками.

Встали в ячейку (внешний цикл), и пошли по веревочке вниз. Левой рукой берём флажок (p), правую по верёвочке переставляем на следующий (next), теперь левой обрываем флажок, и повторяем, подтягивая левую к правой, пока веревочка не кончится (внутренний цикл while)

Когда веревочка кончилась, вырываем её из ячейки delete[]E

READ ALSO
Кривая по точкам

Кривая по точкам

Подскажите каким образом построить ГЛАДКУЮ кривую по заданным точкам?

117
Сравнить слова (лексемы) вводимого текста со словами из текстового файла

Сравнить слова (лексемы) вводимого текста со словами из текстового файла

Надо сравнить лексемы вводимого текста с лексемами из текстового файла и выводить следующую строку от найденной лексемыНо не удаётся вывести

106
Сортировка однонаправленного списка С++

Сортировка однонаправленного списка С++

помогите мне отсортировать список по имени, я понятия не имею как его нормально отсортировать

102
Взаимодействие формы и виджета карты на ней

Взаимодействие формы и виджета карты на ней

Столкнулся с такой задачей как сделать форму, на которой, например, есть два виджета LineEdit и виджет карты (я взял QWebWidget и открыл в нем ЯндексКарты)

94