Linked List. Data Structures | Implementation in JS

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

КОМЕНТАРІ • 89

  • @JavaScript_95
    @JavaScript_95 9 місяців тому +1

    Я очень рад что нашел ваш канал. Спасибо вам.

  • @tesohi
    @tesohi 2 роки тому +11

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

  • @xphnx4085
    @xphnx4085 3 роки тому +21

    Позавчера начал читать "Грокаем алгоритмы", и наткнулся там на упоминание связанных списков. Решил, что на днях поищу что-нибудь о них в контексте использования в JS. А тут такое отличное видео 🙃 Большое спасибо!

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

      Класс! )) Стараемся 🤗

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

      @@frontendscience Что-то я не понимаю в работе классов... Могли бы в двух словах объяснить, как каждый последующий вызов append перемещает объект с переданным value из tale в head ? Конкретно, не понятен момент, когда после this.tale.next = newNode мы переписываем весь tale назначением this.tale = newNode; а новая нода как-то оказывается в next последнего объекта в head...

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

      @@frontendscience Переписал на функции-конструкторы, но яснее не стало. Всё так же непонятно, как новые ноды попадают в head, ведь мы всё время работаем лишь с полем tail (не считая создания объекта linkedList) Что от меня ускользает, подскажите 😒

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

      ​@@frontendscience
      const node = new LinkedNode(value);
      if (!this.head) {
      this.head = node;
      this.tail = node;
      return this;
      } else {
      let current = this.head
      while (current.next) {
      current = current.next
      }
      current.next = node;
      }
      this.tail = node;
      return this;
      Вот здесь мне понятно, как новая нода попадает в head. А какой механизм в реализации на видео? Очень хочется разобраться. Простите за назойливость, если что 😶

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

      Разобрался 😆 Дело в присваивании по ссылке

  • @JavaScript_95
    @JavaScript_95 9 місяців тому +1

    Спасибо! Я только начал изучать, Связный список.

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

    Однозначно! На этом канале будет единственный адекватный курс по алгоритмам!

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

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

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

      Супер! Очень рады, что наши видео полезны!

  • @unknownWakeborder
    @unknownWakeborder 10 місяців тому

    З'явилась таска, яку треба реалізувати через лінкед ліст, а я ніколи не юзав цей алгоритм...
    Дуже дякую за крутий контент!

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

    Я щиро дякую за це відео!) Я хоч і пишу не на JS, але пояснюєте ви дійсно зрозуміло) Я передивилась і перечитала вже мільярд інфи. І тільки зараз дійшло!)

  • @demiurgen13
    @demiurgen13 3 роки тому +6

    Волшебство! Только вчера писал реализацию. Теперь закрепим успех просмотром )
    Требую продолжения банкета с более сложными структурами!

  • @АльфияСаитова-ж4г

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

  • @Аннанежная-м8я
    @Аннанежная-м8я 2 роки тому +3

    Нравится манера подачи материала, приятно и интересно учиться с вами! Надо посмотреть что еще у вас на канале по теме есть)

  • @TheOutpac
    @TheOutpac 3 роки тому +34

    Хочу отметить высокое качество продакшна самого. Видно большой труд: свет, звук, монтаж, качество картинки, и конечно же юмор) все это в купе делает процесс усвоения как бы менее напряжным и ненавязчивым.

    • @frontendscience
      @frontendscience  3 роки тому +6

      Так и задумывалось! Приятно, что оценили ;) 🎈

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

      да приятно смотреть твой контент, простая подача, приятно слушать и материал на уровне@@frontendscience

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

    Вот только закончил "грокаем алгоритмы". Прям магия какая-то!)
    Ждём новые выпуски про структуры данных и алгоритмы)
    Лайк не глядя)

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

    Месяц назад тыкалась в раздел задач по связанным спискам на leetcode, в итоге пока забросила. после этого видоса собираюсь вернуться и добить тему. спасибо за полезный контент!

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

      Рад, что пригодилось :) мы тоже планируем задачки по связным спискам ;)

  • @Noname-i4f3z
    @Noname-i4f3z 3 роки тому +2

    Как же мне не хватало этого видео месяц назад)

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

      Заказывайте новые :) Буду стараться успевать ;)

  • @artemvolsh428
    @artemvolsh428 3 роки тому +2

    Видео просто замечательные, смотрю тебя ещё с видео на канале Яндекса!)

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

    спасибо за материал! был бы очень благодарен за видео по остальным структурам данных 🤠

  • @ВоинственныйХомяк-к8р

    Сергей, огромное спс!
    Когда следующие по уровню дин. массивы графа и прочие основы программирования, я лично очень жду!

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

    Отличное видео, спасибо, очень полезно.

  • @anton-vr5xw
    @anton-vr5xw 3 роки тому +1

    Вауу, прям мои мысли читаете ✨

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

    Очень круто и понятно. Спасибо

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

    while (this.head && this.head.value === value) Так цикл выполниться лишь в том случая, если value будет равно первому next.value

  • @Uncaught_in_promise
    @Uncaught_in_promise 3 роки тому +6

    Вчера проходил собеседование, спросили о паттернах. Изучая базовый JS, я паттерны обошел стороной.
    Может сделаете туториал ?

  • @antiga1000
    @antiga1000 3 роки тому +2

    Отличное видео! Но вот вопрос - пытался кто-то это всё повторить? И никто не получил ошибку в консоли - ReferenceError: describe is not defined?

    • @antiga1000
      @antiga1000 3 роки тому +3

      Установил jest и всё заработало

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

    Спасибо! Отличное видео!

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

    Здравствуйте, подскажите, пожалуйста, с чего начать изучение frontend? Хороши ли книги Джона Дакетта для освоения азов HTML, CSS, JS? К каким курсам в интернете стоит присмореться?

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

    А что за редактор использовался для js?

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

      webstorm

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

      @@frontendscience Уж очень на pycharm похож )

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

    Огромное спасибо за ваш канал! 🫶
    У меня вопрос по поводу метода delete:
    // ... проверка головы списка ...
    let currentNode = this.head.next // присваиваем след. после head элемент, т.к. head уже поставлен на первый не удаленный элемент
    if (currentNode !== null) {
    while(currentNode.next) {
    if (currentNode.next.value === value) { //

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

      сори, вы там потом исправляете это! Вопрос снят)

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

    видео пушка, спасибо)

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

    а в Javascript разве нет чего-то вроде Collection Framework как в Java ?

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

    привет! спасибо за видео) что то полезное взял для себя))) Слушай, возник вопрос в процессе практики, сверстал макет и запушил на github pages, и заметил что на мобильных устройствах у которых слабое железо есть подвисания при открытии аккордеон меню, реализация аккордеона на js - элементу добавляем max-height = scrollHeight. Когда тестировал на компьютере или на других телефонах все было отлично) Как быть со слабым железом на телефонах? Забивать на них?)) Просто даже обычный transform: translate() у бургер меню подвисает) Проблема не в коде, я еще заходил на различные сайты с того телефона с которого лагало и там тоже были проблемы, что посоветуешь предпринять для анимаций на сайте для слабых устройств??

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

      Для слабых устройств нужно минимизировать количество анимаций. Но для этого понадобится детект устройства/браузера. Чтобы скармливать разные css’ки. Что же касается scrollHeight, я так понимаю ты апдейтишь высоту при каждом скролл ивенте. Если это так - то лагать будет сильно. В этом случае обычно используется throttle (у нас на канале есть видео про него), но тогда оно будет работать скачкообразно но не будет подвисать само устройство и тут уже надо добавлять css transform. В общем сложно сказать не понимая реализации. Но надеюсь основные идеи понятны.

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

      @@frontendscience , нет, не при скролле, а при нажатии на само аккордеон меню )) Изначально оно в закрытом состоянии, у них разный контент и я использую в качестве высоты при открытии scrollHeight. Но мне все понятно, спасибо огромное! Буду пробовать))

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

    Помогите пожалуйста разобраться в логике Javascript (она ведь должна быть, правда же?)
    console.log(false==[]); // true
    console.log([]==true); // false
    Это логический контекст, пустой массив трактуется как 0 или false или null
    А теперь оператор if:
    if ([]) // тоже логический контекст, ожидаю false
    console.log('y') // но получаю true - output 'y'
    else
    console.log('n')
    Почему так?

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

      есть разница между тем когда просто в if () записываем [] или используем оператор не строгого сравнения ==. при == происходит приведение к числу. и потом сравниваются числа.

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

      @@frontendscience Большое спасибо за ответ. Тогда перефразирую свой вопрос: если пустой массив не является согласно документации falsy-значением, то почему console.log(Number([]) ); выдает 0? не логичнее ли было бы Nan, при том что Number([0]) это 0, Number([1]) это 1 и т.д.
      Я понимаю, что некоторые вещи просто исторически сложились, это тоже приемлемый ответ. Но для человека, пришедшего из типизированного языка это трудно понять - пустой массив не должен занимать память, это null. В javascript, чтобы не потерять тип array/object, надо где-то хранить служебные данные, поэтому [] не null. Насколько верно мое предположение?

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

    В insertAfter аргументу prevNode наверное надо дать значение null по умолчанию.

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

      Это обязательный аргумент. Поэтому ему ничего и не назначаем по умолчанию. Мы же не задаем value - по умолчанию. Почему тогда для prevNode надо делать дефолт?

  • @_renamed_
    @_renamed_ 10 місяців тому

    А зачем в 21 строке проверяем !this.tail, если и так понятно что если нету head, то это новый пустой список? И зачем в конструкторе ноды this.next = next, если мы при создании новой ноды еще не создали следующую ноду и можно просто null туда записать?

  • @user-fm3mt7jj7b
    @user-fm3mt7jj7b 3 роки тому

    А куда сбрасывать задачи с собеседования ?

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

      Просто в комментарии под видео. Ссылки ютуб не принимает, поэтому если что-то большое, то можно выложить на кодпен и прислать айди сюда

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

    Спасибо. Если можно, без музыки пожалуйста. Отвлекает. Мы же не на дискотеке)

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

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

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

      Уже готовится такое видео!

  • @user_k.alex_
    @user_k.alex_ Рік тому

    Нихрена не понятно, но очень интересно)

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

    👏

  • @Computermind11
    @Computermind11 3 роки тому +3

    У Сергея времени полно - он может позволить себе баловаться какими-то там бессвязными списками! :))) Мы как люди очень занятые пользуемся только массивами! Они и работают быстрее, и, вообще, круче! Хотел скинуть решение суммы трех, но Ютуб опять все затирает, собака...

    • @hyphast171
      @hyphast171 3 роки тому +2

      А кто сказал что массивы работают быстрее? Смотря для каких целей. С помощью списков можно очень быстро удалять или вставлять элемент, нужно всего лишь изменить две ссылки. Если удалять элемент у массива, в худшем случае, если элемент стоит на первом месте, то придется весь массив смещать на одну позицию вперед. У массива плюсом является то, что к элементам можно произвольно обращаться, у списков такого нет, придется итерироваться до тех пор пока не дойдешь до нужного элемента.

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

      @@hyphast171 Да, все верно сказано. Кстати, чтобы удалить элемент из массива необязательно полностью сдвигать. Можно удалить через delete, тогда там останется empty.

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

      @@hyphast171 в случае с одномсвязным списком (как в видео) удаление последнего элемента все еще будет O(n)

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

    12-14 минута что за структура describe(LinkedList , () => {}) ? функция? , мы ее ранее не объявляли, откуда оно взялось, браузер ругается : "describe is not defined" . Разобрался : автору нужно все таки было упомянуть про использование стороннего Фреймворка Jest , без него ошибки!

  • @anton-trofimov
    @anton-trofimov 6 місяців тому

    А зачем было удалять мой комментарий? Что-то плохое в нем? Я просил кого-то объяснить, почему при изменении tail меняется head (кстати, уже разобрался), в видео про это не было, так чем мой комментарий не устроил? Или мб ютуб удалил, хотя там не было ничего запрещенного

    • @vladimirvasilev9189
      @vladimirvasilev9189 Місяць тому

      А можете, плиз, объяснить как это работает (при изменении tail меняется head)?

    • @anton-trofimov
      @anton-trofimov Місяць тому

      @@vladimirvasilev9189 присваивание по ссылке. Если присвоить хотя бы с использованием спред оператора, то уже не будет работать так

  • @ЭзизК
    @ЭзизК Рік тому

    метод delete не очень понятно)

  • @leandrmiklashevich297
    @leandrmiklashevich297 10 місяців тому

    Як шкада, што пан Сяргей спыніў выпуск ролікаў (((

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

    не крайний, а последний. Иначе linked list не получится, потому что с переднего края нельзя встать

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

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

  • @ЮрийШако
    @ЮрийШако 2 роки тому +1

    как не печально но я ни слова не понял (((

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

    35 минут говорить про то, чем ни кто не пользуется... ну такое...

    • @frontendscience
      @frontendscience  3 роки тому +3

      «Вы кажетесь профессионалом!» (с)
      Ну такое….

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

    Я не понимаю как this.tail.next = newNode изменяет this.head.next ???

    • @Alex-cy1is
      @Alex-cy1is 2 роки тому

      Щас тоже с этим затупил. Не разобрался почему так происходило?

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

      @@Alex-cy1is Если разберёшься маякни

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

      @@Alex-cy1is this.tail и this.head ссылаются на один и тот же объект node! Поэтому изменения в этом объекте будут видный и в head, и в tail!

    • @eugenezhdanov-tj3jx
      @eugenezhdanov-tj3jx 3 місяці тому

      @@davranmashrabov5855 спасибо за объяснения) я сначала тоже не понял