Учимся использовать стек и очередь в JavaScript
Вставка
- Опубліковано 16 тра 2024
- Разберём определения, как работать со стеком и очередью в JavaScript. А также порешаем задачки и поучимся их использовать на практике. ❤️
🍀 Поддержать канал: www.donationalerts.com/r/webe...
☕️ Купить кофе: buy.stripe.com/5kA7sL9574SG7x...
🎨 Купить набор кистей Procreate: webelart.com/illustration.
✍️ Мой telegram channel: t.me/webelart
🏰 Английский UA-cam: @webelart_en
💁🏼♀️ Инстаграм: / webelart
🦄 LinkedIn: / webelart
❤️ Код из урока можно скачать на Patreon: / 52197327
00:00 введение.
00:25 определения стека и очереди.
02:18 представление в javascript.
03:44 flatten через stack.
09:06 польская нотация через stack.
18:05 работаем с покупателями в очереди.
25:27 очередь в обходе бинарного дерева по ширине.
На канале я рассматриваю различные темы веб-разработки, на текущий момент: веб-основы, веб-анимации, веб-дизайн.
Не знаю как я нашел твой канал. Но почему раньше не узнал о твой кнал😢. У тебя Божественный талант. Объясните сложное простым языком. Огромное спасибо за урок.
Очень классный контент! Спасибо!
Спасибо Вам, Елена, большое!
спасибо за видосики, очень полезно
Крутая!) Очень много взял для себя из видео!
Как всегда, на высоте😍
Спасибо Вам большое!❤️
❤️❤️❤️
Класс! Спасибо за видео)
Огромнейшее спасибо вам за урок))) Бегу подписываться)
Супер! Спасибо!
Ещё 1 любимый блогер! Спасибо за старания! ❤
Отличное видео, спасибо.
Возможно в задаче на нотацию в условии if(!isNaN(numberedEl) для большей читабельности можно написать просто if(numberedEl) тк он не пропустит falsy - NaN значение.
Обьяснить сложное простым понятным языком это талант!!! Спасибо огромное за Ваши труды! Лучшие уроки в youtube!
Рада, что видео понравилось! Спасибо большое за такие тёплые слова! 😍 Крепко вас обнимаю! ❤️
продолжайте пожалуйста у Вас это очень хорошо получается желаю вам успехов и всего наилучшего!
Отличное видео!
Круто👍🏻
Только начала смотреть и уже поставила лайк♥️
Спасибо! 😍🤗❤️
Эх, помню, как Вицин в операции Ы нарушил правило LIFO ) Хорошие фильмы были, не то , что щас- одну шляпу снимает весь мир. По видосу- вспомнил обучение мое) Не знаю, он мне в рекомендациях выскочил, решил освежить память)
материал хороший. и подача не плоха. год назад поставил бы два пальца но сейчас только один.
Эх, хорошо бы нечто подобное про графы увидеть )
Жду от вас курсы )
Круто
👏
Спасибо большое за урок, нравится ваша подача! Но я не поняла, почему задачу flatten мы решаем с помощью СТЕКА, а не очереди? ведь мы забираем элементы из НАЧАЛА, что соответствует структуре данных ОЧЕРЕДЬ, ведь первый пришел - первый ушел, буду очень благодарна за объяснение
Спасибо за объяснение, но применение стека в ваших примерах как мне видится сильно замедляет код)) Массив хранится в памяти спина к спине и соответственно первый елемент очень важен для памяти. Удаляя первый елемент мы перееопределяем весь массив, то есть каждая итерация O(n). Получается супер медленно - поправьте если я не прав)
Спасибо за комментарий, да удаление первого элемента насколько знаю хуже по памяти, чем последнего.
А если мне например в дереве надо посчитать все цены товаров(узлов), то можно также через стек сделать, но с помощью копии массива const stack = [...arr](чтобы не изменять основной)? Или есть лучше варианты?
Смотря как у вас дерево задано. Вообще мутировать данные обычно не очень хорошо и если возможно создать дубликат, то это круто. Но опять же вы создадите только верхний уровень дубликата. Т.к. все массивы, объекты по ссылке передаются и если у вас внутри есть доп. под массивы, то их по факту тоже нужно копировать.
Вообще можете посмотреть моё видео с деревьями, я там показывала несколько примеров обхода двоичного дерева. ua-cam.com/video/loLjdVaaDKs/v-deo.html. Вдруг будет полезно для ваших задач. ❤️
спасибо! Елена, а видео про стек вызовов будете делать?)
Про рекурсию? 🙂
@@webelart рекурсия тоже весьма интересна) но имел ввиду ситуацию, когда происходит переполнение, например, при использовании нескольких setTimeout() или нескольких event, когда одно событие накладывается на другое
@@lvivduncan Если я правильно поняла, то вы говорите про event loop. Очень крутая тема! Пока даже не думала про эту тему, спасибо за наводку! Но пока не знаю будет ли в ближайшем будущем про это или нет. Кажется вот в этом видео здорово объясняют ua-cam.com/video/8aGhZQkoFbQ/v-deo.html. Если с англ тяжело, там есть русские субтитры и вроде даже не машинные.
@@webelart большое спасибо!)
странно, что так мало лайков
Во flatten не лучше с начала pop, push, а потом уже в result unshift? Сложность совсем другая будет.😊
Pop push лучше использовать. По памяти должно быть продуктивнее.
Подскажите пожалуйста, я вроде 5kyu а вот на этой задаче застрял, как практиковатся чтоб решать такие?
Вообще правило таково, пробуете как получается и как знаете решить задачу, важно чтобы самостоятельно. А потом смотрите решение и ищете лучшее, разбираете. В итоге у вас в голове появится новый кирпичик возможного решения.
Про стеки у меня понимание появилось после того как деревья изучила. Там был обход дерева в примере и я просто поняла как можно такие задачи решать. У меня есть ещё видео про деревья, там кажется были обходы ua-cam.com/video/loLjdVaaDKs/v-deo.html
@@webelart
Спасибо за видео! Но я как-то запутался. Например в вики очередь описана иначе. Главное отличие в том что новый елемент добавляется в конец очереди, а не в начало. Тоже самое в learn.javascript с ссылкой на вики. І соответственно для очереди они предлагают методы push и shift. В чем подвох?
Здравствуйте! Рада, что контент понравился. Давайте разберёмся, что смутило? Если обращаться к определениям, то очередь - первый пришёл, первый ушёл. Стек - первый пришёл, последний ушёл. А там уже используются методы, которые удобнее. По факту можно для очереди unshift и pop применить, но это будет дороже, чем push и shift.
@@webelart Интересно:) Что применять можно разные методы я понял. Просто почему на картинке в вики очередь выглядит не так? В чем подвох?ru.wikipedia.org/wiki/%D0%9E%D1%87%D0%B5%D1%80%D0%B5%D0%B4%D1%8C_(%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5)
@@webelart Написано что елемент добавляется в конец очереди. Вот текст если ссылка не сработала: О́чередь - абстрактный тип данных с дисциплиной доступа к элементам «первый пришёл - первый вышел» (FIFO, англ. first in, first out). Добавление элемента (принято обозначать словом enqueue - поставить в очередь) возможно лишь в конец очереди, выборка - только из начала очереди (что принято называть словом dequeue - убрать из очереди), при этом выбранный элемент из очереди удаляется.
@@yevhenpolishchuk4327 Определение и картинка ок. Уточните, какая минута видео вызвала конфликт и что именно не сходится с представленным вами определением?
@@webelart Я просто питаюсь разобраться для себя что и как работает. У вас в видео все ок. Просто посмотрев ваше объяснение на примерах у меня сложилось впечатление что добавление элементов в очередь происходит в начало очереди. Хотя конкретно об этом вы не говорили. Потом я начал рыть дальше и тогда возник мой вопрос. Было бы понятней если бы вы этот момент уточнили, но это мое субъективное мнение тем более что я только учусь поэтому не судите строго и еще раз спасибо за видео.
Я может что-то не понял но это точно структура данных или речь о том как отсортировать или получить результат используя методику струтуры данных стека или очередь. Так как в Бинарном деревы вы там точно создавали структуру через класс с методами обхода. А здесь тупо функция с результатом.
В качестве стека и очереди в JS можно использовать обычный массив.
@@webelart Не это я вонимаю, но я думал сама идей этих струтктур это ограничений функций типа поиска или извлечение данных из любого места. Например в стеке там должны работать методы push, pop peek,
я начинающий... )) маленькие открытия совершаю )) оказывается while(stack.length) - это пока "стек существует" ... О_о у меня окрываются глаза ))
и на кодварс зашел, даже прошел входное испытание
жалко что вы начали не для самых маленьких с основы основ с элементарных понятий... приходится пропукать
У меня есть видео для начинающий по html, по js пока нет. Экспериментирую с разными форматами. Возможно будут курсы для начинающих в том числе по JS, поэтому следите 😘
Извините. пропуСкать