Linked List. Data Structures | Implementation in JS

  Рет қаралды 31,417

Front-end Science with Sergey Puzankov

Front-end Science with Sergey Puzankov

Күн бұрын

Пікірлер: 89
@JavaScript_00
@JavaScript_00 10 ай бұрын
Я очень рад что нашел ваш канал. Спасибо вам.
@xphnx4085
@xphnx4085 3 жыл бұрын
Позавчера начал читать "Грокаем алгоритмы", и наткнулся там на упоминание связанных списков. Решил, что на днях поищу что-нибудь о них в контексте использования в 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 жыл бұрын
@@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 жыл бұрын
Разобрался 😆 Дело в присваивании по ссылке
@tesohi
@tesohi 2 жыл бұрын
Сергей, большое спасибо. Желаю вам безопасности и свободы! Пусть все будет хорошо у тех, кто сейчас в беде.... тримайтесь!!!
@NamelessSpirit
@NamelessSpirit 2 жыл бұрын
Я щиро дякую за це відео!) Я хоч і пишу не на JS, але пояснюєте ви дійсно зрозуміло) Я передивилась і перечитала вже мільярд інфи. І тільки зараз дійшло!)
@JavaScript_00
@JavaScript_00 10 ай бұрын
Спасибо! Я только начал изучать, Связный список.
@unknownWakeborder
@unknownWakeborder 10 ай бұрын
З'явилась таска, яку треба реалізувати через лінкед ліст, а я ніколи не юзав цей алгоритм... Дуже дякую за крутий контент!
@TheOutpac
@TheOutpac 3 жыл бұрын
Сергей, большое спасибо за эти видосы. Благодаря вам я нехило так прокачался в алгоритмах и структурах данных.
@frontendscience
@frontendscience 3 жыл бұрын
Супер! Очень рады, что наши видео полезны!
@Drezerak
@Drezerak 2 жыл бұрын
Однозначно! На этом канале будет единственный адекватный курс по алгоритмам!
@demiurgen13
@demiurgen13 3 жыл бұрын
Волшебство! Только вчера писал реализацию. Теперь закрепим успех просмотром ) Требую продолжения банкета с более сложными структурами!
@frontendscience
@frontendscience 3 жыл бұрын
Ну класс! ))) 🥳
@TheOutpac
@TheOutpac 3 жыл бұрын
Хочу отметить высокое качество продакшна самого. Видно большой труд: свет, звук, монтаж, качество картинки, и конечно же юмор) все это в купе делает процесс усвоения как бы менее напряжным и ненавязчивым.
@frontendscience
@frontendscience 3 жыл бұрын
Так и задумывалось! Приятно, что оценили ;) 🎈
@denichi872
@denichi872 Жыл бұрын
да приятно смотреть твой контент, простая подача, приятно слушать и материал на уровне@@frontendscience
@Аннанежная-м8я
@Аннанежная-м8я 2 жыл бұрын
Нравится манера подачи материала, приятно и интересно учиться с вами! Надо посмотреть что еще у вас на канале по теме есть)
@lostsouls3151
@lostsouls3151 3 жыл бұрын
Вот только закончил "грокаем алгоритмы". Прям магия какая-то!) Ждём новые выпуски про структуры данных и алгоритмы) Лайк не глядя)
@frontendscience
@frontendscience 3 жыл бұрын
Будет обязательно!
@Noname-i4f3z
@Noname-i4f3z 3 жыл бұрын
Как же мне не хватало этого видео месяц назад)
@frontendscience
@frontendscience 3 жыл бұрын
Заказывайте новые :) Буду стараться успевать ;)
@АльфияСаитова-ж4г
@АльфияСаитова-ж4г Жыл бұрын
Очень хорошо объяснил, спасибо. Стало понятнее, но все равно очень сложно. Видео очень хорошее, особенно благодаря картинкам стало понятнее, что происходит при перемещении указателей. Огромное спасибо!
@polskolg
@polskolg 3 жыл бұрын
Месяц назад тыкалась в раздел задач по связанным спискам на leetcode, в итоге пока забросила. после этого видоса собираюсь вернуться и добить тему. спасибо за полезный контент!
@frontendscience
@frontendscience 3 жыл бұрын
Рад, что пригодилось :) мы тоже планируем задачки по связным спискам ;)
@artemvolsh428
@artemvolsh428 3 жыл бұрын
Видео просто замечательные, смотрю тебя ещё с видео на канале Яндекса!)
@snowiedigga
@snowiedigga 3 жыл бұрын
Отличное видео, спасибо, очень полезно.
@KosTHB1
@KosTHB1 2 жыл бұрын
Очень круто и понятно. Спасибо
@moshchynskyy
@moshchynskyy 2 жыл бұрын
спасибо за материал! был бы очень благодарен за видео по остальным структурам данных 🤠
@anton-vr5xw
@anton-vr5xw 3 жыл бұрын
Вауу, прям мои мысли читаете ✨
@frontendscience
@frontendscience 3 жыл бұрын
🪄🧞
@YaniaRZ
@YaniaRZ 2 жыл бұрын
Спасибо! Отличное видео!
@ВоинственныйХомяк-к8р
@ВоинственныйХомяк-к8р 2 жыл бұрын
Сергей, огромное спс! Когда следующие по уровню дин. массивы графа и прочие основы программирования, я лично очень жду!
@frontendscience
@frontendscience 2 жыл бұрын
Поставил в очередь)
@vladvoloshenko5701
@vladvoloshenko5701 2 жыл бұрын
видео пушка, спасибо)
@Uncaught_in_promise
@Uncaught_in_promise 3 жыл бұрын
Вчера проходил собеседование, спросили о паттернах. Изучая базовый JS, я паттерны обошел стороной. Может сделаете туториал ?
@frontendscience
@frontendscience 3 жыл бұрын
Есть в планах
@namebmw8092
@namebmw8092 Жыл бұрын
Это на Джуна?
@redeyes4884
@redeyes4884 Жыл бұрын
while (this.head && this.head.value === value) Так цикл выполниться лишь в том случая, если value будет равно первому next.value
@antiga1000
@antiga1000 3 жыл бұрын
Отличное видео! Но вот вопрос - пытался кто-то это всё повторить? И никто не получил ошибку в консоли - ReferenceError: describe is not defined?
@antiga1000
@antiga1000 3 жыл бұрын
Установил jest и всё заработало
@jamjam3337
@jamjam3337 Жыл бұрын
👏
@uytwq838
@uytwq838 3 жыл бұрын
Здравствуйте, подскажите, пожалуйста, с чего начать изучение frontend? Хороши ли книги Джона Дакетта для освоения азов HTML, CSS, JS? К каким курсам в интернете стоит присмореться?
@megaboy2k
@megaboy2k 3 жыл бұрын
А что за редактор использовался для js?
@frontendscience
@frontendscience 3 жыл бұрын
webstorm
@megaboy2k
@megaboy2k 3 жыл бұрын
@@frontendscience Уж очень на pycharm похож )
@hondovod250285
@hondovod250285 3 жыл бұрын
привет! спасибо за видео) что то полезное взял для себя))) Слушай, возник вопрос в процессе практики, сверстал макет и запушил на github pages, и заметил что на мобильных устройствах у которых слабое железо есть подвисания при открытии аккордеон меню, реализация аккордеона на js - элементу добавляем max-height = scrollHeight. Когда тестировал на компьютере или на других телефонах все было отлично) Как быть со слабым железом на телефонах? Забивать на них?)) Просто даже обычный transform: translate() у бургер меню подвисает) Проблема не в коде, я еще заходил на различные сайты с того телефона с которого лагало и там тоже были проблемы, что посоветуешь предпринять для анимаций на сайте для слабых устройств??
@frontendscience
@frontendscience 3 жыл бұрын
Для слабых устройств нужно минимизировать количество анимаций. Но для этого понадобится детект устройства/браузера. Чтобы скармливать разные css’ки. Что же касается scrollHeight, я так понимаю ты апдейтишь высоту при каждом скролл ивенте. Если это так - то лагать будет сильно. В этом случае обычно используется throttle (у нас на канале есть видео про него), но тогда оно будет работать скачкообразно но не будет подвисать само устройство и тут уже надо добавлять css transform. В общем сложно сказать не понимая реализации. Но надеюсь основные идеи понятны.
@hondovod250285
@hondovod250285 3 жыл бұрын
@@frontendscience , нет, не при скролле, а при нажатии на само аккордеон меню )) Изначально оно в закрытом состоянии, у них разный контент и я использую в качестве высоты при открытии scrollHeight. Но мне все понятно, спасибо огромное! Буду пробовать))
@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 жыл бұрын
сори, вы там потом исправляете это! Вопрос снят)
@dimeliora
@dimeliora 3 жыл бұрын
В insertAfter аргументу prevNode наверное надо дать значение null по умолчанию.
@frontendscience
@frontendscience 3 жыл бұрын
Это обязательный аргумент. Поэтому ему ничего и не назначаем по умолчанию. Мы же не задаем value - по умолчанию. Почему тогда для prevNode надо делать дефолт?
@denispepper2830
@denispepper2830 3 жыл бұрын
а в Javascript разве нет чего-то вроде Collection Framework как в Java ?
@frontendscience
@frontendscience 3 жыл бұрын
Нет
@_renamed_
@_renamed_ 10 ай бұрын
А зачем в 21 строке проверяем !this.tail, если и так понятно что если нету head, то это новый пустой список? И зачем в конструкторе ноды this.next = next, если мы при создании новой ноды еще не создали следующую ноду и можно просто null туда записать?
@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. Насколько верно мое предположение?
@user-fm3mt7jj7b
@user-fm3mt7jj7b 3 жыл бұрын
А куда сбрасывать задачи с собеседования ?
@frontendscience
@frontendscience 3 жыл бұрын
Просто в комментарии под видео. Ссылки ютуб не принимает, поэтому если что-то большое, то можно выложить на кодпен и прислать айди сюда
@nmatyasov4875
@nmatyasov4875 3 жыл бұрын
Если разговор пошёл о связанном списке, то не плохо бы рассмотреть и разворот связанного списка, задачка с собеседований.
@frontendscience
@frontendscience 3 жыл бұрын
Уже готовится такое видео!
@Computermind11
@Computermind11 3 жыл бұрын
У Сергея времени полно - он может позволить себе баловаться какими-то там бессвязными списками! :))) Мы как люди очень занятые пользуемся только массивами! Они и работают быстрее, и, вообще, круче! Хотел скинуть решение суммы трех, но Ютуб опять все затирает, собака...
@hyphast171
@hyphast171 3 жыл бұрын
А кто сказал что массивы работают быстрее? Смотря для каких целей. С помощью списков можно очень быстро удалять или вставлять элемент, нужно всего лишь изменить две ссылки. Если удалять элемент у массива, в худшем случае, если элемент стоит на первом месте, то придется весь массив смещать на одну позицию вперед. У массива плюсом является то, что к элементам можно произвольно обращаться, у списков такого нет, придется итерироваться до тех пор пока не дойдешь до нужного элемента.
@Computermind11
@Computermind11 3 жыл бұрын
@@hyphast171 Да, все верно сказано. Кстати, чтобы удалить элемент из массива необязательно полностью сдвигать. Можно удалить через delete, тогда там останется empty.
@pavelharelyshau6106
@pavelharelyshau6106 Жыл бұрын
@@hyphast171 в случае с одномсвязным списком (как в видео) удаление последнего элемента все еще будет O(n)
@dimaspng
@dimaspng Жыл бұрын
Спасибо. Если можно, без музыки пожалуйста. Отвлекает. Мы же не на дискотеке)
@user_k.alex_
@user_k.alex_ Жыл бұрын
Нихрена не понятно, но очень интересно)
@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 не очень понятно)
@pavelharelyshau6106
@pavelharelyshau6106 Жыл бұрын
Не надо так в массив значения пушить. Стоит сразу писать какой размер у массива будет. Динамическое измените размера массива весьма затратное в плане производительности, что будет особенно видно на большом объеме данных.
@leandrmiklashevich297
@leandrmiklashevich297 10 ай бұрын
Як шкада, што пан Сяргей спыніў выпуск ролікаў (((
@inqvisitor3722
@inqvisitor3722 2 жыл бұрын
не крайний, а последний. Иначе linked list не получится, потому что с переднего края нельзя встать
@ЮрийШако
@ЮрийШако 2 жыл бұрын
как не печально но я ни слова не понял (((
@kokoc58
@kokoc58 3 жыл бұрын
35 минут говорить про то, чем ни кто не пользуется... ну такое...
@frontendscience
@frontendscience 3 жыл бұрын
«Вы кажетесь профессионалом!» (с) Ну такое….
@pernik85
@pernik85 2 жыл бұрын
Я не понимаю как this.tail.next = newNode изменяет this.head.next ???
@Alex-cy1is
@Alex-cy1is 2 жыл бұрын
Щас тоже с этим затупил. Не разобрался почему так происходило?
@pernik85
@pernik85 2 жыл бұрын
@@Alex-cy1is Если разберёшься маякни
@davranmashrabov5855
@davranmashrabov5855 2 жыл бұрын
@@Alex-cy1is this.tail и this.head ссылаются на один и тот же объект node! Поэтому изменения в этом объекте будут видный и в head, и в tail!
@eugenezhdanov-tj3jx
@eugenezhdanov-tj3jx 4 ай бұрын
@@davranmashrabov5855 спасибо за объяснения) я сначала тоже не понял
How to calculate the complexity of an algorithm by BIG O | The clearest explanation!
25:44
Front-end Science із Сергієм Пузанковим
Рет қаралды 129 М.
Структуры данных в JavaScript | Odessa Frontend Meetup #13
43:08
Odesa Frontend Community
Рет қаралды 24 М.
Гениальное изобретение из обычного стаканчика!
00:31
Лютая физика | Олимпиадная физика
Рет қаралды 4,8 МЛН
Quando A Diferença De Altura É Muito Grande 😲😂
00:12
Mari Maria
Рет қаралды 45 МЛН
So Cute 🥰 who is better?
00:15
dednahype
Рет қаралды 19 МЛН
Solving the problem from JS interview - The valid sequence of brackets | LeetCode problems
15:46
Front-end Science із Сергієм Пузанковим
Рет қаралды 39 М.
Binary Search Algorithm | JavaScript
6:30
Front-end Science із Сергієм Пузанковим
Рет қаралды 50 М.
Пишем полифилы на JavaScript (map, reduce, flat) | Уроки JS
1:00:13
Елена Литвинова — Искусство Веб-разработки 🛸
Рет қаралды 73 М.
LeetCode task about collecting rainwater | JavaScript interview
24:45
Front-end Science із Сергієм Пузанковим
Рет қаралды 20 М.
Task from JS interview - Find the intersection of two arrays | LeetCode
8:21
Front-end Science із Сергієм Пузанковим
Рет қаралды 26 М.
JavaScript Паттерны. Шаблоны проектирования. 17 Примеров
1:54:30
Pet-projects. What projects must a beginner front-end developer do?
33:08
Front-end Science із Сергієм Пузанковим
Рет қаралды 166 М.