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

Поділитися
Вставка
  • Опубліковано 25 лис 2024

КОМЕНТАРІ • 128

  • @SimpleCodeIT
    @SimpleCodeIT  6 років тому +56

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

    • @dark_enigm4
      @dark_enigm4 4 роки тому

      Большое спасибо, лайк поставил)))

    • @user-b7jw834tkhiu
      @user-b7jw834tkhiu 20 днів тому

      Низкий поклон за ваши видосы! Это капец как выручает!

  • @gru74ik
    @gru74ik 6 років тому +80

    Вчера под первой частью написал, что ролик сделан "неплохо". Сейчас понимаю, что довольно сильно преуменьшил оценку. Очень хороший канал, годные ролики. Хорошо поставленная речь, хороший контент, хороший код (за исключением мелких помарок), подробные объяснения. В целом, отличный формат. За наглядную пошаговую демонстрацию процесса в отладчике - отдельный плюс.

    • @-xavie9580
      @-xavie9580 Рік тому

      В целом очень огромная проделана работа над этими уроками. Объяснения на высшем уровне, схватываю всё с первого раза. Единственное, что хотелось бы отметить как минусы, так это то, что все видео записаны в 25 кадров (отчего по началу глаза очень болели) и плохое качество микрофона (его фоновые шумы перебивают музыку на заднем плане, а в начальных видосах вообще крики детей на улице...)

    • @Kellermans-p5r
      @Kellermans-p5r Рік тому

      А ты кто, чтобы говорить о его помарках?

    • @-xavie9580
      @-xavie9580 Рік тому

      @@Kellermans-p5r человек

    • @Kellermans-p5r
      @Kellermans-p5r Рік тому

      @@-xavie9580 я не вам

    • @gru74ik
      @gru74ik Рік тому +2

      @@Kellermans-p5r я - программист. Теперь моя очередь спрашивать. И вот мой вопрос: ты уверен, что автор не в состоянии сам ответить за себя и ему нужен адвокат в твоём лице?

  • @user_x138
    @user_x138 3 роки тому +10

    4 дня просматривал первую часть об односвязных списках, сотни раз прогонял код через отладчик -какой итог? Наконец, понял всю суть указания на поля объекта через указатель с помощью оператора -> и даже сам написал метод для удаления последнего элемента в списке. Кайфы непередаваемые!!! Сергей, ты лучший.

    • @maastm3760
      @maastm3760 2 роки тому +1

      Никак не могу понять для чего это ->, как и где оно используется, помоги!🥲🥺

    • @user_x138
      @user_x138 2 роки тому

      @@maastm3760 Давно это было, уже забыл.

    • @МаксимКурасов-ы2у
      @МаксимКурасов-ы2у Рік тому +1

      @@maastm3760 К полям и методам объекта можно обращаться двумя способами:
      1) Через сам объект. В этом случае используется точка. Например obj.method()
      2) Через указатель на объект. В этом случае используется ->. Например pObj->method()

    • @nick-ei2og
      @nick-ei2og Рік тому

      @@МаксимКурасов-ы2у а ещё "pObj->method()" == "(*pObj).method()"

  • @BrownAleks
    @BrownAleks 4 роки тому +11

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

  • @borisshabanov6702
    @borisshabanov6702 6 років тому +16

    Спасибо, стало понятнее как работает список в STL. Даёшь больше методов в списке!)

  • @artlinestudio6735
    @artlinestudio6735 3 роки тому +8

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

  • @kaisaryerdenbekov1588
    @kaisaryerdenbekov1588 6 років тому +26

    Что за магия? Смотрел, смотрел, и тут "И на этом, мы закончим наш урок...".
    P.S. Время прошло приятно и незаметно.

  • @Yohimbex
    @Yohimbex 3 роки тому +4

    Но ведь это всё можно было реализовать сразу в деструкторе))) Канал топ, всё доходчиво поясняет (даже со скоростью х2)) ). Продолжайте в том же духе)

  • @ВсеволодЗорин-л6н
    @ВсеволодЗорин-л6н 6 років тому +11

    Всё очень хорошо) благодарочка) хорошего Вам здоровья и долгих лет жизни)

  • @segars9604
    @segars9604 11 місяців тому +1

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

  • @SimpleCodeIT
    @SimpleCodeIT  6 років тому +13

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

  • @ДмитрийБузницкий-б3н

    После первой части, вторая часть далась легче :D. Спасибо за урок, Сергей.

  • @tixdo2
    @tixdo2 6 років тому +3

    Включаю видос и автоматом ставлю лайк. Спасибо за уроки все предельно просто))

  • @МихаилКалинин-х4г
    @МихаилКалинин-х4г 6 років тому +8

    Огромное спасибо!!! Как всегда все предельно понятно))))

  • @lollal5827
    @lollal5827 5 років тому +2

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

  • @Nicolas_Cage525
    @Nicolas_Cage525 5 років тому +2

    Вот честное слово что б я без этого канала делал))

  • @Anackom
    @Anackom 6 років тому +8

    Отлично объясняете))) Спасибо за урок!

  • @overdoses1794
    @overdoses1794 6 років тому +8

    Благодарю за урок!

  • @whyyoudidit7
    @whyyoudidit7 7 місяців тому

    большое спасибо! очень подробный и понятный гайд

  • @АндрейМиненко-ц3з
    @АндрейМиненко-ц3з 6 років тому +10

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

  • @neonmadness9479
    @neonmadness9479 3 роки тому

    Спасибо-спасибо-спасибо!!! Лучшие уроки по программированию

  • @nap0le0nb0naparte7
    @nap0le0nb0naparte7 6 років тому +4

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

  • @vladalu9794
    @vladalu9794 6 років тому +5

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

  • @Ermine882
    @Ermine882 6 років тому +4

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

  • @go5190
    @go5190 6 років тому +10

    Спасибо!

  • @_mirai
    @_mirai 5 років тому +6

    еще один полезно-интересный урок:D

  • @andrewbistroff1199
    @andrewbistroff1199 6 років тому +4

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

  • @Вероника-щ1ф6у
    @Вероника-щ1ф6у 6 років тому +4

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

  • @alexandrprodan8794
    @alexandrprodan8794 4 роки тому

    Классный урок!!!Ты великолепен, сенсей.

  • @miroslavklyukovsky683
    @miroslavklyukovsky683 3 роки тому +1

    Спасибо!!!

  • @C2H5OHH
    @C2H5OHH 3 роки тому

    Thank you for the lesson!

  • @satyrosa
    @satyrosa Рік тому +1

    Уже писали про проверку списка на пустоту. Кроме этого предлагаю сделать pop_front() булевым методом и тогда деструктор листа превращается в while(pop_front()){}

  • @TGrod
    @TGrod 3 роки тому +5

    Отличные уроки! Под конец пошло самое интересное))) Но у меня есть вопрос (возможно он решён в третьем видео, но я пока его не смотрел). В методе pop_front() мы не делаем проверку head на nullptr. Из-за этого (вроде как) может выдаться ошибка в строке head = head->pNext; (68 строка), так как head равно nullptr, то мы не можем обратиться к полю pNext, так как его попросту нет
    P.S. Я создал эту ситуацию искусственно (так как лень было переделывать метод pop_front) и написал просто небольшой метод test в котором выводил адрес pNext у head (то есть: cout pNext

  • @Artur-pj2vl
    @Artur-pj2vl 3 роки тому +1

    Топово Обясняешь)

  • @jailyssneust2189
    @jailyssneust2189 3 роки тому

    Благодарен

  • @strtel3186
    @strtel3186 2 роки тому +6

    В методе pop_front(), наверное, было бы лучше, если мы сначала проверили наш список на пустоту. Поскольку вполне может быть, что у нас head указывает на nullptr. И когда мы создаем вспомогательный узел temp, которому присваем head->next, мы можем получить ошибку.

    • @_Yes_.
      @_Yes_. 2 роки тому

      ok👊👊👊

  • @observer7742
    @observer7742 Рік тому

    Спасибо!)

  • @mykhailomorhal2181
    @mykhailomorhal2181 6 років тому +3

    спасибо)

  • @viper_0097
    @viper_0097 9 місяців тому

    Самое сложное в реализации подобного - создать каркас)
    А дальше уже интуитивно додуматься можно

  • @Moonev_Fantasy
    @Moonev_Fantasy 4 роки тому

    Двухтысячный лайк твой)

  • @petro_f7996
    @petro_f7996 6 років тому +6

    В методе pop_front не плохо было бы делать проверку на наличие хоть одной ноды, что бы не загнать size в минуса. Проще проверять (size > 0).

  • @GeorgeBondarchuk
    @GeorgeBondarchuk 6 років тому +1

    супер!

  • @ЯрославГоловко-ф6и

    спасибо

  • @kaynsolo
    @kaynsolo 6 років тому +2

    Simple!

  • @shigo123
    @shigo123 4 роки тому

    Я каждый раз как будто прозреваю после каждого ролика 😂

  • @ЄвгенСухоставець
    @ЄвгенСухоставець 5 років тому

    0 дизлайков!!! Красава, так даржать!

  • @Роман-т8с1ь
    @Роман-т8с1ь Рік тому +3

    Да уж, незавидная судьба у переменной temp. Она жалкая пародия head, котрая нужна только для того чтобы ее удалили😢

  • @romkagm7756
    @romkagm7756 3 роки тому

    3 человека так плакали из-за идеального объяснения, что промазали по кнопке лайка)

  • @ЭдуардМединский
    @ЭдуардМединский 6 років тому +3

    Функцию pop расписал слегка по-другому ( всегда пытаюсь сделать свой вариант потом смотрю по видео) , интересует верный ли мой вариант , все работает , на сколько я заметил , да и по логике правильно , кто разбирается скажите верен ли алгоритм
    void deleteEl() {
    Node *tmp = head->next;
    delete head;
    head = tmp;
    size--;
    }

    • @СправаФея
      @СправаФея 6 років тому +1

      delete не удаляет head, а очищает (освобождает) выделенную память, на которую указатель head указывает. после данной операции head продолжает указывать на ту же область память, но там уже находится мусор,) вспомни первые уроки про delete, nullptr, если же не смотрел - лучше посмотри,)

  • @АлександрНазаров-ш7н
    @АлександрНазаров-ш7н 5 років тому +6

    Здравствуйте строчки
    Node *temp=head;
    head=head->pNext;
    delete temp; //Мы в темп так ничего и не записали так как указатель на Head присвоили следующему элементу сраазу во второй строке
    Size--;

    • @lehamoroz5306
      @lehamoroz5306 4 роки тому

      указатель *temp указывает на первый элемент, если мы его просто так убиваем, разве первый элемент не будет продолжать висеть в воздухе?

    • @TheWladberlin
      @TheWladberlin 4 роки тому

      @@lehamoroz5306 Нет, не будет. Указатель temp как раз и указывает на бывший head (первый элемент) поэтому мы его, разумеется, можем удалить и через temp.
      Если та запись тебя ирритирует, то напиши по-другому:
      Node *temp;
      temp = head;

    • @TheWladberlin
      @TheWladberlin 4 роки тому

      "Мы в темп так ничего и не записали " - в каком смысле не записали? А это что:
      Node *temp=head; ?

    • @michaelivanov1605
      @michaelivanov1605 4 роки тому

      @@TheWladberlin а зачем на temp если мы с ним не чего не делаем, кроме того что создаём и удаляем? Можно ведь без него обойтись?

    • @shibu5180
      @shibu5180 Рік тому

      @@michaelivanov1605 мы очищаем память от head

  • @DmitryDolganov
    @DmitryDolganov 5 років тому +2

    Спасибо! Жесть)))

  • @ilovemove1
    @ilovemove1 Рік тому

    Тут уже мб писали, в pop_front нету проверки if (head != nullptr). Если попнуть несколько раз, имея в списке лишь 1 элемент, то будет ошибка.

  • @yaroslavvodotyka8345
    @yaroslavvodotyka8345 6 років тому +4

    Если еще читаете тут коментарии, то почему не предусмотрели ситуацию в pop_front , когда не будет элементов, то если мы его вызовем, то head указывая на null , попробует обратиться к pNext и получим ошибку, или просто я чего то не понял?

    • @pashakkaa
      @pashakkaa 6 років тому

      Всё правильно, надо ещё 2 строчки в начале метода добавить:) Автору огромное спасибо за уроки.

    • @savinposter9816
      @savinposter9816 5 років тому

      Pavlo Kornya получается надо проверить на то , что если указатель на head уже nullptr?

    • @deletedaccount3077
      @deletedaccount3077 5 років тому

      @@savinposter9816
      Как решил проблему?

    • @savinposter9816
      @savinposter9816 5 років тому

      @@deletedaccount3077 так и проверил

  • @Felix-og7pd
    @Felix-og7pd 4 роки тому

    Спасибо 2020

  • @Arxpetro
    @Arxpetro Рік тому

    5:46 Все мы знаем, что хедшот наносит максимальный урон!

  • @romikgrigoryan6552
    @romikgrigoryan6552 3 роки тому

    2021год , нету такого канала больше

  • @АлександрАлександр-й1н3ф

    Head = Head → pnext;
    Не совсем понятен этот синтаксис, что именно эта стрелочка означает. Подскажите, пожалуйста, какую тему загулить, чтобы разобраться?

    • @arranorun8808
      @arranorun8808 2 роки тому +2

      head->pNext; тоже самое что и head.pNext;

  • @takatochi2605
    @takatochi2605 4 роки тому +1

    Ошибка C2446 ==: нет преобразования "const int" в "List::Node *" что єто такое и почему у тебя нет с етим проблем

    • @takatochi2605
      @takatochi2605 4 роки тому

      Ошибка C2446 ==: нет преобразования "const int" в "List::Node *"

    • @romanpirs2550
      @romanpirs2550 2 роки тому

      template
      void List::pop_front()
      {
      Node *temp = head;
      head = head->pNext;
      delete temp;
      Size--;
      }
      поставь *temp и всё решица
      (НЕ ЗРЯ ТЫ ЖДАЛ 2 ГОДА)

  • @user-go1dz6zx6p
    @user-go1dz6zx6p 5 років тому

    Приветствую, я немного не понимаю, в односвязном списке элемент же добавляются в конец списка, а достаётся последний прибывший элемент(LIFO). А у вас первыми достаются элементы, которые первыми и пришли. Ведь так? Это же не LIFO...

  • @overchikkk
    @overchikkk 6 років тому +2

    Когда конец курса ? И какой новый курс ? С#?

    • @SimpleCodeIT
      @SimpleCodeIT  6 років тому

      ua-cam.com/video/EQdq3XxoJQQ/v-deo.html

  • @Рыззе
    @Рыззе 3 роки тому

    Можно и так, наверное
    void List::pop_front()
    {
    Node *temp = head->pNext;
    delete head;
    head = temp;
    this->size--;
    }

  • @tenten44
    @tenten44 Рік тому

    понимаю, что поздновато пишу, но странно, что перед этой темой изучались умные указатели и тут как бы идеальная тема, чтобы их применить, но почему-то юзаются обычные указатели. Я в целом написал, тоже самое но с умными указателями и добавил несколько новых методов. Так как я не эксперт, у меня вроде все работает, но я не совсем понимаю как и точно ли правильно. Было бы круто сразу умные указатели применить на практике. (у все шаред, не совсем понимаю нужно ли где-то строить над ними вик или нет и точно ли чиститься память)

  • @ИринаИрина-ш5ы7р

    Всё ясно и понятно,но вот код почти не видно из- за недофокусировки видеокамеры!

  • @jekax-ray9793
    @jekax-ray9793 6 років тому

    А как сделать удаление элементов по индексу???

  • @dukenukem1675
    @dukenukem1675 2 роки тому +1

    а мы не можем обойтись без temp и удалить сразу head а потом ему присвоить следующий указатель на элемент?

    • @arranorun8808
      @arranorun8808 2 роки тому +1

      Если сразу удалим head, то потеряем ссылку на следующую Node.

    • @dukenukem1675
      @dukenukem1675 2 роки тому

      @@arranorun8808 спасибо!, Не подумал об этом

  • @welnyr
    @welnyr 4 роки тому

    Указатель head удалять не нужно? В конце он будет равен nullptr, но у меня всё равно есть сомнения

  • @lehamoroz5306
    @lehamoroz5306 4 роки тому

    В методе pop_front указатель *temp указывает на первый элемент, если мы его просто так убиваем, разве первый элемент не будет продолжать висеть в воздухе?

    • @BrownAleks
      @BrownAleks 4 роки тому +2

      В переменной *temp копия адреса на бывший первый элемент. И убиваем (освобождаем память по этому адресу) мы его после того, как первым элементом становиться второй.

    • @michaelivanov1605
      @michaelivanov1605 4 роки тому

      @@BrownAleks пол часа размышлял над этим в 4 часа ночи)спасибо!

    • @BrownAleks
      @BrownAleks 4 роки тому

      @@michaelivanov1605 на здоровье. Наберитесь терпения, самое вкусное ещё впереди... =)

  • @lebedead
    @lebedead 3 роки тому

    7:14 теперь можем наш temp безнаказанно удалить, как говорится temp в сделку не входил.

  • @mortlemur9510
    @mortlemur9510 4 роки тому

    а где можно найти этот код?

    • @BrownAleks
      @BrownAleks 4 роки тому +1

      Ручками, прямо с экрана конспектируй. Получишь массу удовольствия, практику и понимания логики происходящего. =)

  • @alimuhamedaliev6665
    @alimuhamedaliev6665 4 роки тому +1

    в этом видео 1 дислайк, и поставил его Я) "нет я поставил лайк"

  • @MouseDaison
    @MouseDaison 5 років тому +58

    Я, конечно, понимаю, что видео уже больше года и писать сюда не совсем актуально, однако видеть, что у него 1к лайков и всего 1 дизлайк - что-то невообразимое!
    Чур, дизлайк не мой! Я всегда под этим каналом лососи леплю!!!)))

    • @faasfasasf8109
      @faasfasasf8109 4 роки тому +4

      1.5к лайков vs 1 дизлайк, это нечто)

    • @michaelivanov1605
      @michaelivanov1605 4 роки тому +2

      @@faasfasasf8109 есть видосы до этого, где их было вообще 0.

    • @dtrqk811
      @dtrqk811 3 роки тому +1

      2 года видосу, 2к лайков, 3 дизлайка ))

    • @Yohimbex
      @Yohimbex 3 роки тому

      Уже 3(((

    • @asankod8549
      @asankod8549 3 роки тому

      @@Yohimbex оторвать бы им руки

  • @pavelnovikov3894
    @pavelnovikov3894 3 роки тому

    А если так ?
    while (head!=nullptr)
    {
    pop_front();
    }

  • @Sk1pi-o2x
    @Sk1pi-o2x Рік тому

    Не знаю ответит ли кто то
    В коде pop_print
    void List::pop_front()
    {
    Node temp = head;
    head = head->pNext;
    delete temp;
    Size-- ;
    }
    Все правильно но много ошибок
    Писал весь код на Vs 2022

    • @Get_Boros
      @Get_Boros Рік тому

      Node *temp = head; возможно *указатель пропустил), не проверял так что это не точно

  • @senez1976
    @senez1976 2 роки тому

    Я очень люблю обезьян, я представляю их обнажёнными.............!!!!!!!

  • @МарянКобильник
    @МарянКобильник 6 років тому

    +

  • @narzaru
    @narzaru 4 роки тому

    Наткнулся тут на видно, а есть ли результативная разница между удалением первого элемента на 8:07 и этим кодом ?
    void List::deleteFirstItem()
    {
    ListNode* temp = headList->pNext;
    delete[]headList;
    headList = temp;
    }

    • @БогданЯріш-й4х
      @БогданЯріш-й4х 4 роки тому

      Нет

    • @satyrosa
      @satyrosa Рік тому

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

    • @narzaru
      @narzaru Рік тому

      @@satyrosa, у меня код некорректный, как минимум delete[], как максимум удаление головы. Скорее всего, два года назад, я хотел провернуть штуку, как запомнить следующий элемент, удалить текущий и заменить удаленный следующим.

  • @senez1976
    @senez1976 2 роки тому

    jr

  • @jojomajo
    @jojomajo 4 роки тому

    1500 лайков и всего 2 дизлайка, вау

  • @romkagm7756
    @romkagm7756 3 роки тому

    рандомный комментарий рандомный комментарий рандомный комментарий рандомный комментарий

  • @KurpatovInstagram
    @KurpatovInstagram 6 років тому +5

    Спасибо!

  • @pavelios3577
    @pavelios3577 6 років тому +2

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

  • @Antonov_Ivan.
    @Antonov_Ivan. Рік тому

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

  • @DD0S2
    @DD0S2 3 роки тому

    спасибо

  • @ВітяКоміссаров
    @ВітяКоміссаров 2 роки тому

    спасибо