Реализация односвязного списка c++ Часть 1 | Урок

Поделиться
HTML-код
  • Опубликовано: 16 янв 2018
  • В этом уроке мы начнём писать собственный односвязный список на языке программирования C++ с подробными пояснениями.
    Односвязный список | Динамические структуры данных #1
    Теория goo.gl/E5KrVi
    Определение методов вне класса. Вынести функцию в из класса. Вынести описание метода вне класса. #89
    goo.gl/gqh536
    Шаблоны классов с++ примеры. Обобщенные классы. Изучение С++ для начинающих. Урок #126
    goo.gl/U99h9t
    ✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅
    Если вам нравятся мои уроки, вы хотите поддержать меня и развитие канала, то можете сделать это тут!=)
    🔴🔴🔴 www.donationalerts.ru/r/simple...
    или тут
    🔴🔴🔴 / simplecode
    ✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅
    Уроки по программированию
    Наша группа ВК smplcode
    Подписывайтесь на канал / @simplecodeit

Комментарии • 357

  • @viktoriiavolkova756
    @viktoriiavolkova756 6 лет назад +277

    Спасибо вам большое. Я сама студентка и нам сказали лабы писать на С++, теперь вся група смотрит вас и учиться. Вы хорошо рассказываете, понятно. Спасибо.

    • @SimpleCodeIT
      @SimpleCodeIT  6 лет назад +17

      Пожалуйста!

    • @user-le7wn3tb3c
      @user-le7wn3tb3c 6 лет назад +5

      +

    • @user-mm8hc5uu1e
      @user-mm8hc5uu1e 4 года назад +2

      @@SimpleCodeIT Сергей, подскажите, пожалуйста, в каком уроке появился синтаксис типа "current->pnext" или "current-> data" 20:34

    • @shoorikefimov6759
      @shoorikefimov6759 4 года назад +27

      @@user-mm8hc5uu1e Урок про указатель this №94.
      Коротко: с прототипа класса к полям обращаемся через точку, с указателя через ->
      Node current;
      current.pNext;
      Node *current;
      current->pNext;

  • @brennydit
    @brennydit 4 месяца назад +16

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

  • @SimpleCodeIT
    @SimpleCodeIT  6 лет назад +203

    *Cамый лучший способ сказать "спасибо" - поставить лайк и и поделиться уроком с друзьями. Это очень мотивирует создавать полезные уроки =)*

    • @borisshabanov6702
      @borisshabanov6702 6 лет назад

      Зачем создавать шаблонный Node, когда он и так объявлен в шаблонном List. Тип T для всех будет один, разве нет?

    • @zaramar8250
      @zaramar8250 6 лет назад

      нет

    • @borisshabanov6702
      @borisshabanov6702 6 лет назад

      Миша Якименко я проверил, лишний шаблон не нужен

    • @masasikisimoto26
      @masasikisimoto26 5 лет назад

      @@borisshabanov6702 у меня тоже так сработало, не пойму смысла Node делать шаблонным. В code::blocks вообще ошибку выдает.

    • @kosmoz8131
      @kosmoz8131 2 года назад

      Более того компилятор не запускает программу , так как не может понять параметр T, я пишу в code blocks, может в studio по другому

  • @Son-of-the-God---
    @Son-of-the-God--- 2 года назад +16

    Памятник при жизни Сергею поставлю!!! Спасибо вам Сергей за ваши труды, здоровья вам и вашим близким, долгих лет жизни, и хороших людей рядом!!!

  • @SeshAlex
    @SeshAlex 6 лет назад +75

    Спасибо за урок! Для учащихся - в процессе урока пишите код, на не понятных моментах делайте паузы и перебирайте код отладчиком или глазами, так легче мозг принимает информацию.

  • @user-ut7tj6bp4t
    @user-ut7tj6bp4t 4 года назад +32

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

  • @akkh6971
    @akkh6971 2 года назад +6

    Не описать словами чувство удовлетворения от понимания устройства односвязного списка после ваших разъяснений! Спасибо большое!

  • @user-nw5iw5ew9z
    @user-nw5iw5ew9z 2 года назад +5

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

  • @neverhoodJK
    @neverhoodJK 6 лет назад +13

    ну ты дал, Сергей!:)) загрузил так загрузил:) самое удивительное, что я все понял, а я новичок в этом) Спасибо! и присоединяюсь про бабосы с первой зп. Это заслуженно 100%.

  • @maxamly
    @maxamly 5 лет назад +4

    Господи это реально лучший канал по си плюсам, Чувак ты лучший❤️❤️❤️

  • @stephandolskii7964
    @stephandolskii7964 2 года назад +11

    Я не знаю, как бы я изучил ЭТО без таких прекрасных объяснений. Это шедевр

  • @observer7742
    @observer7742 Год назад

    Огромное спасибо! Отличные, понятные, содержательные уроки. Очень полезно!

  • @SimpleCodeIT
    @SimpleCodeIT  6 лет назад +13

    #односвязныйсписок #динамическиеструктурыданных #SimpleCode #урокипрограммирования

  • @user-kp9hh9ox1i
    @user-kp9hh9ox1i 6 лет назад +4

    классный урок, спасибо Сергей!

  • @user-ic3kv9oz3g
    @user-ic3kv9oz3g 2 года назад +11

    Вообще не знаю, как бы я понимал программирование без Сергея. Спасибо, друг.

  • @RemboZSU
    @RemboZSU 6 лет назад +2

    Спасибо большое за урок. Преподы не могут так объяснить как вы!)

  • @mykhailomorhal2181
    @mykhailomorhal2181 6 лет назад +330

    Обещаю часть своей первой зарплаты (от работы програмиста) отправить вам на поддержку канала!

    • @user-ku8jc7lt9b
      @user-ku8jc7lt9b 6 лет назад +22

      Присоединяюсь, отличная идея!

    • @llllNEOllllchannel
      @llllNEOllllchannel 6 лет назад +28

      peace да ball

    • @iii-mk7no
      @iii-mk7no 4 года назад +64

      @Artur Golovenko Тебе так хочется верить. Я отучился на программиста, за 5 лет обучения я знаю меньше чем с уроков ютуба(т.к там преподу пофигу знаешь ты или нет. Он приходит сидит там мямлет что то себе под нос, читая слайд шоу. На ютубе ты можешь выбрать канал, а препода в универе нет.При обучении я просто ненавидил с++.) Конечно нужно еще почитать кое какой инфы и книг, много гуглить, много проб и ошибок. Этот диплом, что я получил мне абсолютно никакой пользы не принес. Работаю не по специальности. Данная работа мне приносит, для моего опыта и возраста колоссальный доход ,какие то цифры я приводить не буду, дабы тут не хвастаться не перед кем. Но у данной моей работы есть огромные минусы. Она очень тяжелая, много грязи, и еще связана с командировками(причем бывают и по пол года). Поэтому я решил вернуться к истокам с чего и начинал, к программированию. Смотря курс Сергея(ему огромное отдельное спасибо!!!!). Я постиг много во, теперь действительно могу что то написать. Читаю книги Бьерна Страуструппа, все свое свободное время просто вкладываю в обучение. Учу параллельно английский. Главное вера в себя, хорошая усидчивость, голова на плечах и руки не из одного места:) Сергею еще раз большое спасибо, из всех просмотренных мной каналов это самый лучший. Он действительно хорошо все объясняет, как говорят, нам все разжевал - осталось только в рот положить. По сравнению с тем же Дударем(давайте создадим переменную, а хотя можно и не создавать) - его смотреть это когда все знаешь.

    • @avocadoman6038
      @avocadoman6038 4 года назад +8

      @@iii-mk7no Ну, как бы суть современного высшего образования в том, что тебе указывают нужное направление, а дальше ты сам в интернете и библиотеках учишься.

    • @mykhailomorhal2181
      @mykhailomorhal2181 4 года назад +19

      @@jojomajo 1) Російська мова не є моя рідна 2) Гроші я переказав, можеш спитати у автора 3) Зараз працюю в Європі айтішніком :) За допомогою цього вже всю Європу об'їздив, фотки вислати?)

  • @andrewbistroff1199
    @andrewbistroff1199 6 лет назад +5

    Спасибо за урок!

  • @user-os5ee2fg9d
    @user-os5ee2fg9d 5 лет назад +1

    Спасибо за отличный урок!

  • @KurpatovInstagram
    @KurpatovInstagram 6 лет назад +8

    Спасибо!

  • @nap0le0nb0naparte7
    @nap0le0nb0naparte7 6 лет назад +11

    Спасибо большое Сергей за реализацию списка!

  • @user-bc4vi6hl2f
    @user-bc4vi6hl2f 6 лет назад +9

    Спасибо за урок

  • @kaynsolo
    @kaynsolo 6 лет назад +3

    Very available explained!Like!

  • @jangiryanarsen4952
    @jangiryanarsen4952 6 лет назад +8

    Просто безумно интересно, продолжай в таком же духе Сергей!!! От меня лайк.

  • @vladalu9794
    @vladalu9794 6 лет назад +7

    спасибо большое, очень понравился урок, продолжай в том же духе!!!

  • @segars9604
    @segars9604 7 месяцев назад

    Спасибо за бесценный труд!)

  • @alexkuyrib2580
    @alexkuyrib2580 4 года назад +1

    большое спасибо за урок!!! Удачи Вам) а каналу 500К подписчиков!!!

  • @TheWladberlin
    @TheWladberlin 4 года назад

    Спасибо большое за урок!

  • @pavelios3577
    @pavelios3577 5 лет назад +2

    Спасибо за урок.

  • @alexshyshkov3919
    @alexshyshkov3919 6 лет назад +22

    видео класс, жду уроков про очередь и бинарное дерево)

  • @C2H5OHH
    @C2H5OHH 2 года назад

    Thank you for the lesson!

  • @billlanc9461
    @billlanc9461 2 года назад

    Пришел из курса по C#. Тема Рекурсия. Плюсы таки сложнее шарпа, но смотреть интересно. Автор канала крут!

  • @hotabmax6431
    @hotabmax6431 4 года назад +42

    Мы создаём объект List. Внутри объекта лист счётчик и капсула Node с адресом следующей капсулы и данными. Функция push_back создаёт указатель на первую капсулу. Если адрес следующей капсулы равен нулю, то в переменной pNext мы создаём новую капсулу, если же там есть адрес то мы перебираем все адреса путём присваивания из капсулы head параметра pNext следующего адреса в переменную current. И так пока адрес следующей капсулы не будет равен 0. И опять же дойдя до этого элемента присваиваем в параметр pNext следующую капсулу. 3 дня ушло чтобы это всё понять)

    • @user-oo9tn8fj7i
      @user-oo9tn8fj7i Год назад +1

      Привет а зачем нужно создавать временный указатель(current) ?

    • @Jeff-cn4sf
      @Jeff-cn4sf Год назад

      @@user-oo9tn8fj7i она типа временная, я тоже задался этим вопросом. Попробовал сделать без нее используея this->head ну и это даже не компилилось)
      Это позволяет, я так понял, обращаться по очереди к каждому адресу это в случае перегрузки operator[], а в PushBack() это позволяет последовательно создавать новые элементы списка. Трудно объяснить к сожалению, но отладчиком все хорошо можно проследить)

    • @nick-ei2og
      @nick-ei2og Год назад

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

    • @Lol-nz7fn
      @Lol-nz7fn Год назад

      @@nick-ei2og Сказал человек, который растянул мысль на целый параграф)))

    • @Lol-nz7fn
      @Lol-nz7fn Год назад +1

      @@user-oo9tn8fj7i Указатель current мы создаём потому что он перебирает все элементы, тем самым присваивая себе эти элементы по очереди, пока не дойдёт до последнего элемента и дальше не создаст новый(речь идёт о Push_Back), а head нельзя изменять потому что это начальный элемент

  • @user-rv9ss5ce7z
    @user-rv9ss5ce7z 6 лет назад +3

    Серега спасибо!

  • @grintea4163
    @grintea4163 5 лет назад

    Большое спасибо за урок

  • @user-pd4gt9zz9c
    @user-pd4gt9zz9c 6 лет назад +3

    В очередной раз огромная благодарность Вам за доходчивое разъяснение и внятный, толковый пример.

  • @user-qb8um2ec4c
    @user-qb8um2ec4c 4 года назад +1

    этот чувак просто гений у него есть настоящий дар учителя потрясающий контент!

  • @tyomka4265
    @tyomka4265 6 лет назад +5

    очень интересно

  • @Lol-nz7fn
    @Lol-nz7fn Год назад

    Блин, ну вроде бы понял как это всё работает, спасибо Сергею за такой труд)

  • @user0tgvyjfc
    @user0tgvyjfc 2 года назад +1

    Классное видео! Кстати можно было избежать цикла while при добавлении не первого элемента в push_back, например, объявив Node* last рядом с head и далее использовать в push_back.

  • @overdoses1794
    @overdoses1794 6 лет назад +17

    Уважаемый, Сергей! 10к подписчиков, с чем я вас сильно поздравляю=). Надеюсь ролик о том, как вы стали программистом монтируется(просто не терпится послушать).

    • @SimpleCodeIT
      @SimpleCodeIT  6 лет назад +7

      Спасибо! Я всё помню, ролик будет завтра.

  • @user-yw9bq1pt9v
    @user-yw9bq1pt9v 11 месяцев назад +1

    Огромное спасибо !!!!

  • @shutup-kc5ud
    @shutup-kc5ud 3 года назад

    Благодаря вам сдала лабу по программе, большое спасибо ~

  • @armm6437
    @armm6437 2 года назад

    Мощно)2 ой день уже смотрю)

  • @sofafrom1047
    @sofafrom1047 Год назад

    Это просто нереально полезный для меня урок

  • @rudthakyred_alert6359
    @rudthakyred_alert6359 2 года назад +21

    Не знаю как в VS17 а в VSCode и компиляторе g++, чтобы исключить ошибку декларирования
    ("error: declaration of template parameter 'T' shadows template parameter") можно писать так:
    template
    class List
    {
    private:
    template //Т - ненадо объявлять, т.к. переменная объявлена ранее
    class Node
    {
    public:
    Node *pNext;
    T data;
    Node(T data = T(), Node *pNext = nullptr)
    {
    this->data = data;
    this->pNext = pNext;
    }
    };
    Node *head;
    int Size;
    public:
    List(/* args */);
    ~List();
    void push_back(T data);
    int GetSize() { return Size; }
    T &operator[](const int index);
    };

    • @dfc56
      @dfc56 Месяц назад

      Огромное спасибо. Очень выручил!

  • @user-zt5hj1um5l
    @user-zt5hj1um5l 2 года назад +2

    3 часа бился над ошибкой, почему не выводит результат lst[2], при этом забыв завести команду lst.push_back(22). Только отладчиком понял, что условие if не возвращает результат, потому что 3 переменную листа не завёл)) Кстати в кодблокс пришлось у Node делать тип T1, иначе не работает. Спасибо комментариям снизу. Тема обсуждалась, когда число подписчиков было 10 тыс, а я смотрю когда уже 233 тыс. Спасибо, Сергей за отличные уроки. Надеюсь через год переквалифицируюсь из инженера-конструктора в программисты.

  • @ertargn
    @ertargn 6 лет назад +4

    спасибо чувак.. сними уроки для c#. буду благодарен

  • @paulsound8430
    @paulsound8430 2 года назад +1

    Разобрал я этот пример и подумал про себя а умно все это сделано=)

  • @user-gw4uc3gs7z
    @user-gw4uc3gs7z Год назад

    безмерная благодарность Тебе

  • @pashakkaa
    @pashakkaa 5 лет назад +4

    Автору огромное спасибо за урок! Скажите, пожалуйста, обязательно ли внутренний класс Node делать шаблонным? Ведь и класс List, и класс Node всегда будут работать с одинаковыми типами данных.

  • @miroslavklyukovsky683
    @miroslavklyukovsky683 2 года назад +1

    Спасибо!!!

  • @pashastatch8313
    @pashastatch8313 4 года назад +3

    Сегодня на собесе загрузили по данной теме, хотя опыт 20 лет на сях. Всегда есть чему учится.

  • @borisshalabanov4620
    @borisshalabanov4620 6 лет назад +7

    спасибо

  • @user-pv8ir9py9b
    @user-pv8ir9py9b 11 месяцев назад

    Отличный курс!!!!!!!!!!!!!!!!!

  • @user-nd4sl1lp9b
    @user-nd4sl1lp9b Год назад +1

    Спасибо за разъяснение.Всё толково и понятно!❤

    • @Hikikomori123
      @Hikikomori123 8 месяцев назад

      чего добился за эти 5 мес?

    • @user-nd4sl1lp9b
      @user-nd4sl1lp9b 8 месяцев назад

      ​@@Hikikomori123всё работает хорошо.Список у меня из структур.Хотел что бы происходила сортировка по какой либо записи структуры,но пока не знаю как используя стандартные средства среды это сделать?

  • @ilyat7109
    @ilyat7109 4 года назад +6

    Данная программа не компилируется, выдается ошибка (declaration of template parameter 'T'). Проверил в нескольких компиляторах везде одна и та же ошибка. Как её решить? А главная, почему программа в ролике вообще компилируется ???????????????

  • @sergeysitenko
    @sergeysitenko 4 года назад +19

    У вас в плейлисте "Основы C++. Программирование для начинающих" не хватает теории про односвязный список. (то что ссылка в описании видел)

    • @user-r5jflfskjlaJJFs
      @user-r5jflfskjlaJJFs 11 месяцев назад +1

      и весь остальной плейлист про динамические структуры данных

  • @araikrasoyan702
    @araikrasoyan702 5 лет назад +1

    Спасибо.

  • @TGrod
    @TGrod 3 года назад

    Ну push_back можно было бы оптимизировать. Просто в list хранить ещё и указатель на последний элемент. Далее мы в поле последнего элемента приравниваем новый указатель new Node (data), после чего просто в указатель в List мы приравниваем вновь созданный указатель

  • @RensetVideos
    @RensetVideos 6 лет назад +3

    Спасибо за урок, но было бы лучше, если на простые вещи было бы меньше акцента, а на более сложные - больше.

  • @Russian-Stalinist
    @Russian-Stalinist 4 года назад

    Главное, что определение методов внутри определения класса делает их встроенными, что не нужно в большинстве случаев. А уже потом это загромождает код.

  • @user-jm5dk2nh7t
    @user-jm5dk2nh7t 5 лет назад +1

    Урок предельно понятный и информативный, но нужно еще и самому всё это написать и пробежаться отладчиком.

  • @thetiphon
    @thetiphon Год назад +2

    Я думаю объект типа T в функцию push_back надо передавать по ссылке, а не по значению.
    А то получается ты копируешь объект 3 раза: из main в push_back, из push_back в конструктор Node и из конструктора Node в переменную data класса Node

  • @darth_kenobi4136
    @darth_kenobi4136 2 года назад +2

    Для тех кто не понял как работает pNext:
    while просматривает значение current->pNext, если оно не nullptr то берет значение адреса памяти следущего елемента.
    а присваиваеться это следущее значение текущему в функции push_back этими строчками:
    Node* current = this->head;//создаеться указатель на первый указатель класса
    если у первего указателя переменная pNext = null; то создаеться новый екземпляр класса Node с pNext = null, а pNext у head(если изменить значение у указателя то значение основного обьекта также смениться) становиться равным адрессу памяти нового екземпляра при помощи:
    current->Nextptr = new Node(data);
    и так можно добавлять елементы до бесконечности, каждый елемент будет хранить указатель на следущий

  • @mrrodman5265
    @mrrodman5265 5 лет назад +2

    Вопрос: как сохраняется указатель *current, который создался в методе push_back? Разве он не должен уничтожится когда мы выходим за область видимости?

  • @_girnetix_
    @_girnetix_ 2 года назад +2

    Было бы неплохо добавить указатель на последний элемент этого списка, т.к. при больших значениях узлов такого списка, его создание займёт огромное количество времени

  • @oraclevb5430
    @oraclevb5430 4 года назад

    лучший!

  • @user-vf9gm9zn4x
    @user-vf9gm9zn4x 4 года назад

    в реализации оператора индексации, после цикла while желательно написать обработку ситуации, когда индекс меньше количества элементов. Т.е.
    while(current!=nullptr) выполнится раньше, чем найдем индекс.
    Обычно компиляторы такой код не компилят, но х3. Спасибо, брооо

    • @eninyri
      @eninyri 3 года назад

      а не должно быть - while(current->Nextptr != nullptr) ?

  • @user-mm8hc5uu1e
    @user-mm8hc5uu1e 4 года назад +1

    Подскажите, пожалуйста,в каких уроках начинается синтаксис типа "current->data"?

  • @sergeychernov5094
    @sergeychernov5094 3 года назад +1

    Ребята, подскажите пожалуйста, каким образом новый экземляр класса Node присваивается укателю header в области видимости метода pushback 16:30 строка 60 (Node* header = new Node(data)). Как это работает? Обычно к указателям можно присвоить ссылки.

  • @aggressivnyy
    @aggressivnyy 4 года назад +1

    КРАСАВА

  • @alexandrkarpov4544
    @alexandrkarpov4544 3 года назад +2

    Спасибо за уроки, Сергей! Надеюсь еще читаете эти комментарии.
    Такой вопрос:
    Решил после просмотра серии уроков про список, написать самостоятельно по полученным знаниям свой класс списка. И на моменте описания перегрузки оператора [ ] у меня получились расхождения с вами.
    В моем случае я эту перегрузку описал так:
    template
    T& List::operator[](int index)
    {
    int counter = 0;
    Node* current = head;
    while (counter != index)
    {
    current = current->pNext;
    counter++;
    }
    return current->data;
    }
    Подскажите, как мне кажется мой вариант более компактный, однако он допускает значения индекса больше, чем список имеет значений. И в случае превышения индекса программа завершается с ошибкой, как это было бы с обычным массивом, выйдя за его пределы. В вашем же случае, при выходе за границы результат всегда будет 0.
    Помню вы говорили, что лучше если программа завершится с ошибкой, чем выдаст какое-то значение, из-за которого дальнейшая работа будет некорректна и мы устанем искать причину такого поведения.
    Собственно вопрос, как лучше описывать эту перегрузку?)

    • @user-r5jflfskjlaJJFs
      @user-r5jflfskjlaJJFs 11 месяцев назад

      Node *current = this->head;
      for (int i = 0; i < index; i++)
      {
      current = current->pNext;
      }
      return current->data;
      Я описал это вот так. Но в моём случае при отрицательном значении индекса оператор возвращает первый элемент списка. Но не думаю, что это большая проблема

  • @pavelnovikov3894
    @pavelnovikov3894 3 года назад

    браво

  • @prostocrazy1105
    @prostocrazy1105 Год назад +2

    я целых часов 5 наверное сидел и перетирал что вообще происходит(в частности с тем откуда 2 поля(pNext) у 1 переменной )

  • @user-zd9pc1tk7r
    @user-zd9pc1tk7r 5 лет назад +2

    А если через оператор индексирования нужно вывести несколько элементов, как это сделать?

  • @alexandrkryvopust7505
    @alexandrkryvopust7505 2 года назад +1

    Может кому-то будет изначально не понятно как и мне. Указатель head содержит адрес по которому одновременно хранятся данные + указатель на следующий элемент. Соответственно когда в функции push_back мы создаем указатель current то в него попадает, то что лежит по первому элементу List (это два поля данные и указатель(который, для случая, что у нас только 1 элемент листа все еще равен nullptr). Затем мы в поле указателя ячейки листа у которой поле указателя на следующий элемент равно nullptr присваиваем адрес данных (новая ячейка) которую мы функцией Push_back добавляем.

  • @user-pq5si5mk3z
    @user-pq5si5mk3z 10 месяцев назад

    спасибо.

  • @anastasiagolomazova4961
    @anastasiagolomazova4961 4 года назад +3

    Знаю вопрос глупый, но! Не могли бы вы объяснить почему мы не можем класс Node вписать вне класса List и потом просто к нему обращаться

  • @user-sr5qh2xj2g
    @user-sr5qh2xj2g 6 лет назад +5

    Если мы динамически выделяем здесь память, почему нет ее освобождения?

  • @user-ll5dg6zm8d
    @user-ll5dg6zm8d 2 года назад

    Здравствуйте!
    Можете ли сказать,почему когда мы выделяем дин память под елемент,мы не удаляем его в конце в деструкторе?
    Мы же по сути не очищали память,а все равно прога компилируется

  • @i4q236
    @i4q236 6 лет назад +7

    Сергей, привет! Спасибо за реализацию списка! Это твоё первое видео такой внушительной продолжительностью...насколько я помню было одно длительностью 30 минут конструктор копирования! Когда будешь записывать видео ответы на ваши вопросы озвучь, пожалуйста, с помощью какой программы монтируешь видео! Случайно не Sony Vegas Pro 13? ))))

    • @SimpleCodeIT
      @SimpleCodeIT  6 лет назад +4

      Пожалуйста! Монтирую с помощью Vegas Pro 14

  • @user-qj6tk5fw9p
    @user-qj6tk5fw9p 2 года назад +1

    даужь, начались наконец то уроки по сложнее

  • @user-le7of7bq1v
    @user-le7of7bq1v 3 года назад

    Здравствуйте! Подскажите, пожалуйста, как так же сразу вставить код класса? (как на 2:42)

  • @iilyaa
    @iilyaa 5 лет назад

    А где можно посмотреть урок на счет указателя в классе? А то не понял момент на счет Node *pNext

  • @user-tl9qe9hg5s
    @user-tl9qe9hg5s 4 года назад +2

    head = head->pNext;//head получает адрес следующего элемента списка
    Но где в коде описано когда этот адрес на следующий элемент получен? Когда head->pNext получило какое-то значение, а не nullptr?

  • @anisaalsabri
    @anisaalsabri 5 лет назад +1

    А как реализовать “Очередь” на основе односвязного списка? Это как вообще? Что-то логику не поняла

  • @user-rq8db7oy3p
    @user-rq8db7oy3p 6 лет назад +16

    выдает ошибку error: declaration of template parameter 'T' shadows template parameter|

    • @assert_null
      @assert_null 4 года назад +7

      Потому что Node не должен быть шаблоном, если List - шаблон. Или, по крайней мере, имя шаблонного параметра у Node не должно совпадать с таковым у List. Но лучше все-таки первый вариант.

  • @koral7441
    @koral7441 Год назад

    Сложно, но понять можно!

  • @higiro9333
    @higiro9333 3 года назад +5

    Окей, а что там с деструктором?

  • @KorolElizavetaR
    @KorolElizavetaR 11 месяцев назад

    Ловите мой вариант функции push_back
    void List::push_back(T info)
    {
    if (tail == NULL)
    tail = head = new Node(info, head);
    else
    tail = tail->next = new Node(info);
    size++;
    }
    в этом варианте в классе должен быть еще Node*tail, который всегда будет находиться в самом низу списка (он все еще односвязный), tail->next всегда = NULL. Такой вариант кода позволяет не пробегать по всему списку каждый раз, когда элемент надо добавить вниз.

  • @andrytitoruk4205
    @andrytitoruk4205 4 года назад +6

    невозможно преобразовать аргумент 1 из "Т" в "List::Node *"

    • @Andrey-qj9sj
      @Andrey-qj9sj 4 года назад

      Нашёл решение?

    • @andrytitoruk4205
      @andrytitoruk4205 4 года назад

      @@Andrey-qj9sjнет

    • @oljaolsa7261
      @oljaolsa7261 4 года назад +2

      поміняй місцями параметри в класі нут в круглих дужках
      спочатку напиши T data=T() а потім Node *pNext

    • @user-vt1qt3ub1q
      @user-vt1qt3ub1q 4 года назад +1

      @@oljaolsa7261 Вы серьезно думаете что все знают укр язык?

    • @user-vt1qt3ub1q
      @user-vt1qt3ub1q 4 года назад

      Код целиком скинь

  • @user-hm7wm5pk5m
    @user-hm7wm5pk5m Год назад

    Я правильно понимаю, что pop_back невозможно сделать за O(1), так как даже, если у нас есть указатель на послед. элемент, то, имея односвязный список: []->[]->[]->nullptr , чтобы удалить последний нужно предпоследнему сделать nullptr, иначе будет висячий указатель(последний же удалится). Предпоследний же нужно также перебирать сначала списка.

  • @user-tb7yn5yy3g
    @user-tb7yn5yy3g 4 года назад +11

    мозг кипит)

  • @danielto1404
    @danielto1404 5 лет назад

    Было бы круто хранить текущий size и tail тогда все кроме взятия индекса за О(1))))))

  • @user-fu1ll7xy4d
    @user-fu1ll7xy4d 6 лет назад +2

    а должен ли оператор квадратных скобок возвращать что либо если по какой либо причине индекс выходит за размер листа? (ну, имхо, я проверял бы как-нибудь)

    • @SimpleCodeIT
      @SimpleCodeIT  6 лет назад +1

      Можно проверять и бросать exception в случае выхода за границы списка, но это уже тонкости реализации.

  • @SeshAlex
    @SeshAlex 6 лет назад +3

    Кстати. Запустил прогу, вписал 50 тыщь, и консоль затупила)) Теперь я понял в чем разница списка и массива. Массив быстрее работает с большими индексами.

    • @user-yn7gi6os8d
      @user-yn7gi6os8d 3 года назад

      Ахахахах, тоже показательный пример

  • @nikita3471
    @nikita3471 6 лет назад +2

    Посоветуйте, пожалуйста, источники с обучением программированию на языке java
    script.

  • @vitusink6445
    @vitusink6445 4 года назад +1

    Вы говорите что прошлый урок №132 посвящен теоретической части односвязного списка. Но он посвящен: "Динамический массив и умные указатели"

  • @gavrilskrybykin7749
    @gavrilskrybykin7749 3 года назад

    Я вот не понял как head.pNext получает адрес current.
    Так как в методе push_back, я как понимаю, к current присваиваем адрес head.