Тёмный

#8. Односвязный список. Структура и основные операции | Структуры данных 

selfedu
Подписаться 154 тыс.
Просмотров 27 тыс.
50% 1

Обучающий курс: stepik.org/a/134212
Инфо-сайт: proproprogs.ru/structure_data
Что такое односвязный список. Структура односвязного списка. Основные операции: добавление и удаление элементов, произвольный доступ к элементам.

Опубликовано:

 

29 сен 2022

Поделиться:

Ссылка:

Скачать:

Готовим ссылку...

Добавить в:

Мой плейлист
Посмотреть позже
Комментарии : 47   
@user-qn6pq1dk5h
@user-qn6pq1dk5h Год назад
О, помню как я в курсе по ООП разбирался с односвязными и двусвязными списками. На всю жизнь запомнил))
@_mrmark
@_mrmark Год назад
Я сейчас разбираюсь. Уже голова кругом идет. Почти что-то доходит, но очень туго ))
@user-ed6cn1eo6f
@user-ed6cn1eo6f Год назад
такое не забудешь
@siarheiulas6969
@siarheiulas6969 Год назад
Очень интересная тема. Большое спасибо за объяснение!
@mslq
@mslq Год назад
Однозначно.
@user-ee1lx1pe7n
@user-ee1lx1pe7n Год назад
Спасибо огромное! Очень круто!!!
@dshigh
@dshigh Год назад
Огромное спасибо!
@Artem-er3ie
@Artem-er3ie Год назад
Вы лучший
@eltimccc
@eltimccc Год назад
Лучше чем эти уроки, я не видел! Но неплохо бы было пояснить, как перебрать элементы до того элемента, после которого планируется вставка еще одного... while node?
@kish_mish_haha8551
@kish_mish_haha8551 4 месяца назад
Смотрю это видео и двухсвязный список потому что прохожу ООП и оооочень тяжко доходит, путаница не много получается. Думаю что возьму курс по структурам данных, но хотелось бы чтобы в видео было применение в коде потому что не очень понятно (точнее совсем не понятно) как этим пользоваться, я понимаю что курс для с++ и питонистов поэтому кода нет и это очень печально что нет примеров в коде
@donfedor007
@donfedor007 5 месяцев назад
очень полезный материал! Почему так мало лайков? Я вот смотря на степике перехожу на ютуб и лайкаю.
@user-tb2jp7kg2c
@user-tb2jp7kg2c Год назад
Уточните, пожалуйста, а почему добавление в конец это не O(n)? Мы же должны вначале последовательно дойти до текущего конечного элемента, чтобы поменять у него ссылку. Точно так же как проходим до предпоследнего когда удаляем с конца
@selfedu_rus
@selfedu_rus Год назад
мы когда добавляем, то на последний элемент есть указатель tail, поэтому новый элемент ptr просто цепляется к нему, то есть: tail.next = ptr ptr.prev = tail tail = ptr и все
@user-tb2jp7kg2c
@user-tb2jp7kg2c Год назад
@@selfedu_rus спасибо, вопрос возник в связи с тем, что в языке скала list это односвязный список, но при этом в документации написано что добавление в конец занимает O(n). Скорее всего, потому что tail там ссылается не на последний элемент, а на список всех кроме первого. docs.scala-lang.org/overviews/collections/performance-characteristics.html
@wizardx_X
@wizardx_X Год назад
Немного не понятно, как реализовать этот список с начального состояния. То есть сначала у нас нет объектов, и head, tail node равный None. Потом мы создаем первый объект, на который указывает все 3 переменные. Дальше мы создаем второй объект, на который теперь указывает tail и node, потом третий также, четвертый и т.д. Я правильно понял?
@selfedu_rus
@selfedu_rus Год назад
да, верно
@youtubeyoutube6205
@youtubeyoutube6205 Год назад
06:53 а как на счёт добавить в каждый элемент ещё и ссылку на предыдущий? тогда доступ к произвольному элементу может быть осуществлен за O(n/2) 😁
@selfedu_rus
@selfedu_rus Год назад
это уже будет двухсвязный список (о нем далее), а O(n/2) = O(n) - см. занятие по О большому
@user-bb6cs6wk6y
@user-bb6cs6wk6y 5 месяцев назад
В теории вск понятно, а вот как это в код перенести,вот в чем вопрос
@user-tx2yu9sm6q
@user-tx2yu9sm6q 6 месяцев назад
Удаление из конца тоже должно быть О(1) - у нас есть указатель на конец списка. Разве не так?
@user-tx2yu9sm6q
@user-tx2yu9sm6q 6 месяцев назад
Вопрос решил, нужно из предпоследнего ссылку удалить
@salten13
@salten13 Год назад
Почему говориться что в конец односвязного списка вставка О(1) ? Просто как я понял , чтобы присвоить предпоследний элемент в тейл, нам нужно будет этот предпоследний элемент найти, итерируя список с головы. так как привиос метки у нас нет.
@selfedu_rus
@selfedu_rus Год назад
У нас имеется указатель tail, который всегда ссылается на последний элемент. Он формируется при добавлении новых элементов (и их удалении).
@salten13
@salten13 Год назад
@@selfedu_rus ну, допустим. У нас есть сингл лл. У него есть тейл. У тейла есть поле некст привиос нету как в длл. Чтобы удалить тейл нам сначала же надо найти превиос. Тоесть элемент который стоит перед тейлом который и будет после удаления новым тейлом. Чтобы его найти нам надо по некстам нодов про итерировать с головы. Я об этом. Как бы удаление будет (1) но под капотом удаления ещё и итерация, а это уже О(N)
@selfedu_rus
@selfedu_rus Год назад
@@salten13 здесь речь о добавлении, удаление да, O(N)
@salten13
@salten13 Год назад
@@selfedu_rus Понял. В любом случае, спасибо за пояснения!
@user-qe7dr1zp2x
@user-qe7dr1zp2x 9 месяцев назад
Вродебы понятно, но для чего это используется?)
@mslq
@mslq Год назад
А указатели должны быть в обе стороны списка у каждого объекта, тогда всё быстро, не надо с самого начала перебирать.
@selfedu_rus
@selfedu_rus Год назад
Это уже двусвязный список будет. На самом деле не всегда нужны проходы в обратном порядке, например, при реализации стека. Поэтому и односвязные списки занимают свою нишу.
@mslq
@mslq Год назад
@@selfedu_rus Есть ли готовый объект с двусторонним ходом? чтобы самому не городить.
@selfedu_rus
@selfedu_rus Год назад
@@mslq collections.deque
@mslq
@mslq Год назад
@@selfedu_rus Нашёл, спасибо.
@buzzerbeatz5927
@buzzerbeatz5927 Год назад
все, кроме команд iterator, может быть реализовано с временной сложностью O (1) :)
@selfedu_rus
@selfedu_rus Год назад
произвольный доступ к элементу, в общем случае, не может, требует O(n) времени, иначе бы от массивов просто отказались бы ))
@mslq
@mslq Год назад
@@selfedu_rus А если указывать на элемент списка чем нибудь другим, например курсором на экране, то перебирать весь список не нужно, нужно только чтобы каждый элемент связного списка указывал на предыдущий элемент и последующий.
@user-nd7gg2fd8t
@user-nd7gg2fd8t Год назад
Ощущаю себя олигофреном... Вроде всё схематически понятно. Но как реализовать без понятия. Посмотрел реализацию односвязного списка и ничего не понял. Реально затуп. Сложно в голову укладывается... Уважуха и белая зависть тем кто всё улавливает на лету)
@mslq
@mslq Год назад
таких нет, мне например раза с третьего или с пятого просмотра заходит, зависит от сложности. )
@gpankov
@gpankov Год назад
О от единицы, что такое О? Что такое единица?
@gpankov
@gpankov Год назад
единица это количество элементов О(n). n - это количество элементов в списке. А что такое О? Время почему О?
@selfedu_rus
@selfedu_rus Год назад
@@gpankov см. первые два занятия
@blommorblommor6587
@blommorblommor6587 Год назад
Голос неприятный
@Alexa-ts8kb
@Alexa-ts8kb Год назад
вы так обижены жизнью?
@blommorblommor6587
@blommorblommor6587 Год назад
@@Alexa-ts8kb сашка иди-ка ты отсюда
@Alexa-ts8kb
@Alexa-ts8kb Год назад
@@blommorblommor6587 все таки угадала) хе-хе
@blommorblommor6587
@blommorblommor6587 Год назад
@@Alexa-ts8kb то что мне не нравится чей-то голос конечно же означает обиженность жизнбю
@heybeachMIN
@heybeachMIN 2 месяца назад
@@blommorblommor6587 смысл об этом писать? ты тоже мб много кому не нравишься, но я думаю тебе это не говорят? или у тебя травмы
Далее
😍😂❤️ #shorts
00:12
Просмотров 105 тыс.
How To Learn Algorithms? Why? #codonaft
19:22
Просмотров 562 тыс.