Структуры данных в Python #1: Односвязные списки

Поделиться
HTML-код
  • Опубликовано: 21 сен 2024
  • В этой серии уроков мы будем учиться реализовывать собственные структуры данных в языке python. Начнём со списков и далее по списку, извините за каламбур. На следующем уроке закончим разбирать все остальные виды списков, потому как они все очень похожи.
    Оставляйте комментарии и подписывайтесь на канал, чтобы не пропустить новые видео! Приятного просмотра!
    Ссылка на статью с хабра: habr.com/ru/po...
    Теги:
    программирование, IT, python, code, vscode, структуры данных, алгоритмы, как написать списки, односвязный список, САКОД.

Комментарии • 45

  • @programming_etc
    @programming_etc  Год назад +14

    Ребят, я в шоке. 13к просмотров на конец январая 2к23го. Спасибо всем огромное и там, ну это... можете другие видосики посмотреть... вот....

  • @souromortyl6748
    @souromortyl6748 27 дней назад +1

    лучший! Я пересмотрел видео 10-15 и ток у тебя понял, что да как
    советую всем делать сохранение - ложиться спать после изучения информации, затем читаем ещё раз и делаем
    работает 10000%

  • @rus_azer
    @rus_azer 11 месяцев назад +3

    Два дня рою интернет чтобы с 0 понять linked list, наконец-то нашёл нормальный видос, где с 0 он создаётся, заполняется, запускается. А то везде написано как создать, а как заполнить и запустить никто не говорит

  • @KabyNKS
    @KabyNKS Год назад +2

    Спасибо этому человеку который все понятно объяснил. Хочу увидеть видео про некоторых алгоритмов например Алгоритм дейкстры или алгоритм кадена. Жду не стерпением!

  • @CyrexisX
    @CyrexisX 3 года назад +2

    Хороший гайд, поможет студентам, которые начинают изучать структуры и алгоритмы обработки данных

  • @МаксимВиноградов-ъ8ь
    @МаксимВиноградов-ъ8ь 2 года назад +5

    13:50 Можно было сделать просто while node. Так как node мы каждый раз присваиваем значение следующего узла, то когда мы обработаем последний, в переменной node будет Null.
    23:30 в принципе, perv_node нам и не нужен в функции get.
    Насчёт length тебя уже поправили.
    Ну и для каждой функции нужно обрабатывать исключения. Например у тебя есть список [10, 20, 30], а ты изменяешь, получаешь или удаляешь 4 элемент.
    Спасибо тебе большое за видос, все внятно и понятно объяснил.
    Успехов тебе!❤️

  • @ДмитрийКлеваков-л7ы
    @ДмитрийКлеваков-л7ы 3 года назад +6

    Спасибо автору! все понятно объяснил. Жду продолжения серии роликов про структуры данных в Python!
    self.length, как атрибут класса, можно было бы использовать и работал бы правильно, если увеличить счетчик в момент добавления головного элемента на 16-ой строке.

  • @ВладаЗубенко
    @ВладаЗубенко 5 месяцев назад

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

  • @marinaivanova5277
    @marinaivanova5277 5 месяцев назад

    Спасибо, автор, на пальцах все объяснил!

  • @oleksandr64
    @oleksandr64 3 года назад +1

    очень все понятно обьяснил, давай следующий урок!

  • @ВадимГаращенко-я7т

    Вопрос-замечание автору, точнее 2 (сам новичок, поэтому не ругайте, пытаюсь сам разобраться).
    1) В методе insert, при вставке в начало списка (когда index == 0), возникает бесконечный цикл. Необходима реализация, где создается новый узел и присваиваете ему next_node ссылку на текущий self.head.
    def insert(self, val, index):
    i = 0
    previous_node = self.head
    current_node = self.head
    # If inserting at the beginning
    if index == 0:
    new_node = self.Node(val, next_node = self.head)
    self.head = new_node
    else:
    # Find the correct insertion position
    while i < index:
    previous_node = current_node
    current_node = current_node.next_node
    i += 1
    previous_node.next_node = self.Node(val, next_node=current_node)
    согласны ли?
    2) В методе delete, нет необходимости использовать del. Ведь в момент, когда мы переназдначаем ссылку previous_node.next_node = node.next_node удаляемый елемент теряет ссылку на себя и будет автоматически удален сборщиком мусора.
    def delete(self, index):
    i = 0
    current_node = self.head
    previous_node = self.head
    if index == 0:
    self.head = self.head.next_node
    else:
    while i < index:
    previous_node = current_node
    current_node = current_node.next_node
    i += 1
    previous_node.next_node = current_node.next_node
    P.S. Автору огромное спасибо за материал! Очень ценю, когда люди тратят свое время чтобы поделиться своим опытом!

  • @Andrestiks1
    @Andrestiks1 2 года назад +1

    Видео прикольное и полезное! Спасибо автору!

  • @ВасяПупкин-п7с7г
    @ВасяПупкин-п7с7г Год назад +3

    Чтобы узнать длину, проще счётчик запихать в класс Node.
    Вернее атрибут создать в LinkedList, а плюсовать уже в Node.
    Тогда при создании каждой ноды будет +1 и не надо в каждый метод прописывать.
    DRY!

    • @kif_chik5911
      @kif_chik5911 Год назад

      А можете, пожалуйста, рассказать, как такое провернуть?🙏

  • @aleksbostorn5342
    @aleksbostorn5342 Год назад

    О дааа. прекрасно понимаю уже как лл работает, но решить задачу - испытание))

  • @taxedomask551
    @taxedomask551 Год назад

    Благодарю за видео!

  • @asdegtv
    @asdegtv 4 месяца назад

    Не смею критиковать автора, возможно, у меня что-то вышло не так. При использовании метода insert с параметром index=0, происходит так, что переданный элемент и элемент head просто повторяются бесконечное количество раз, потому что не переопределяется переменная head
    def insert(self, index, element):
    node = self.head
    prev_node = self.head
    if index == 0:
    self.head = self.Node(element=element, nextNode=prev_node)
    return element
    for i in range(0, index):
    prev_node = node
    node = node.nextNode
    prev_node.nextNode = self.Node(element=element, nextNode=node)
    return element

  • @НикитаЯнварев
    @НикитаЯнварев 3 года назад +1

    Спасибо большое ты мне очень помог!

  • @annazaitseva6213
    @annazaitseva6213 3 года назад

    Благодарность за урок!

  • @deranakt185
    @deranakt185 3 года назад +4

    Го некст видос, про двусвязные списки, очереди и тому подобное!

    • @programming_etc
      @programming_etc  3 года назад

      В ближайшее время запилю на двусвязные и циклические списки.

    • @deranakt185
      @deranakt185 3 года назад +1

      @@programming_etc а можно прям в ближайшее ближайшее время? А то видео на эту тему нет(на питоне), а мне сдавать лабы уже надо🤣🤣🤣🤣

  • @максволков-с5у
    @максволков-с5у Год назад

    бро сп все помогло удачи тебе !!!!!

  • @mathseed
    @mathseed Год назад

    Спасибо за видео:D

  • @IT_T_
    @IT_T_ 2 года назад

    я начал решать задачи на leetcode и не понимал что вообще за структура данных это, хотел сам воспрозвести но не вышло, спасибо за помощь

  • @IT_T_
    @IT_T_ 2 года назад

    Спасибо!

  • @anaken127
    @anaken127 6 месяцев назад

    мне так кажется я никогда это не пойму)))

    • @anaken127
      @anaken127 6 месяцев назад

      а не, понял

  • @some_dude1
    @some_dude1 26 дней назад

    Чел, спасибо.
    Может кто подсказать где я недоглядел. На 12:45 в этом фрагменте, когда я запускаю свой код, мне выдает:
    "TypeError: Node() takes no arguments"
    Мой код:
    class LinkedList:
    head = None
    class Node:
    element = None
    next_node = None
    def __int__(self, element, next_node=None):
    self.element = element
    self.next_node = next_node
    def append(self, element):
    if not self.head:
    self.head = self.Node(element)
    return element
    node = self.head
    while node.next_node:
    node = node.next_node
    node.next_node = self.Node(element)
    def out(self):
    node = self.head
    while node.next_node:
    print(node.element)
    node = node.next_node
    print(node.element)
    linked_list = LinkedList()
    linked_list.append(10)
    linked_list.append(15)
    linked_list.append(312)
    linked_list.append(54)
    linked_list.append(1001)
    linked_list.out()

  • @electr-i2z
    @electr-i2z Год назад

    nice...

  • @yusifaliyarov3180
    @yusifaliyarov3180 6 месяцев назад

    insert с индексом 0 будет норм работать? там по идее head.next = element, element.next = head будет

  • @academai11
    @academai11 2 года назад

    Спасибо за видео, яндекс позвонил говорят на hh резюме увидели и пригласили пройти стажировку. Вот сижу делаю заметки так сказать 😂

    • @programming_etc
      @programming_etc  2 года назад

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

    • @academai11
      @academai11 2 года назад

      @@programming_etc я на devops направление, там написано "базовые алгоритмы" так что верю в лучшее но учту)) не планируешь продолжить рубрику?

    • @real_scorp
      @real_scorp Год назад

      @@academai11 доброго дня : ) Получилось собеседование пройти в Яндекс? Какие были задачи, вопросы? : )

  • @Ugliest122
    @Ugliest122 Год назад

    В def get можно ли убрать prev_node = node? Нам же не обязательно помнить предыдущий, чтобы вывести индекс?

  • @veraburak8049
    @veraburak8049 Год назад +1

    отлично все. только код пишите заранее. мне совсем неинтересно смотреть ошибки кода и процесс его набивания. а так все супер, продолжайте пжста

  • @cherry_ds372
    @cherry_ds372 2 года назад +1

    "здравствуйте мои маленькие любители видеок...." а... блин

  • @APCblK
    @APCblK 3 года назад

    Привет, сделай видео о взломе вайфая через wps или через другие способы очень интересная тема

  • @ilyin_sergey
    @ilyin_sergey 10 месяцев назад

    а можно ссылку на гитхаб?

  • @Тимофей-т5э
    @Тимофей-т5э Год назад

    че так сложно