Добро пожаловать!

Структуры данных и алгоритмы на Python

Miriam Antona

Software Engineer

Важность алгоритмов и структур данных

  • Структуры данных и алгоритмы позволяют
    • решать повседневные задачи
    • с помощью эффективного кода
  • Курс можно пройти на любом языке программирования
Структуры данных и алгоритмы на Python

Алгоритмы и структуры данных

  • Алгоритм: набор инструкций для решения задачи

    1. Проектирование

      Схематичное изображение проектирования алгоритма.

    2. Код

      Схематичное изображение кода алгоритма.

  • Структуры данных: хранят данные и управляют ими при выполнении алгоритма
    • Продвинутые структуры данных: связные списки, стеки, очереди...
Структуры данных и алгоритмы на Python

Связные списки

Наглядный пример связного списка с шагами приготовления хлеба.

  • Последовательность данных, соединённых ссылками
Структуры данных и алгоритмы на Python

Связные списки – структура

Изображение узла связного списка.

Структуры данных и алгоритмы на Python

Связные списки – структура

Изображение узла связного списка со словом "DATA" в первой части.

Структуры данных и алгоритмы на Python

Связные списки – структура

Изображение узла связного списка со словом "DATA" в первой части и "NEXT" с указателем во второй.

Структуры данных и алгоритмы на Python

Связные списки – структура

Изображение двух узлов связного списка, соединённых ссылкой.

Структуры данных и алгоритмы на Python

Связные списки – структура

Изображение нескольких узлов связного списка, соединённых ссылками.

Структуры данных и алгоритмы на Python

Связные списки – структура

Изображение связного списка, где последний узел указывает на null.

Структуры данных и алгоритмы на Python

Связные списки – структура

Изображение связного списка со словом "HEAD" в первом узле.

Структуры данных и алгоритмы на Python

Связные списки – структура

Изображение связного списка со словом "TAIL" в последнем узле.

  • Данные не обязаны храниться в смежных блоках памяти
  • Данные могут находиться по любому доступному адресу памяти
Структуры данных и алгоритмы на Python

Односвязные списки

Изображение односвязного списка.

  • Одна ссылка: односвязный список
Структуры данных и алгоритмы на Python

Двусвязные списки

Изображение двусвязного списка.

  • Две ссылки в обоих направлениях: двусвязный список
Структуры данных и алгоритмы на Python

Связные списки – применение

  • Реализация других структур данных:
    • стеки
    • очереди
    • графы
  • Навигация по данным вперёд и назад
    • веб-браузер
    • плейлист
Структуры данных и алгоритмы на Python

Связные списки – класс Node

class Node:
  def __init__(self, data):
    self.data = data
    self.next = None
Структуры данных и алгоритмы на Python

Связные списки – класс LinkedList

class LinkedList:
  def __init__(self):
    self.head = None
    self.tail = None
Структуры данных и алгоритмы на Python

Связные списки – методы

  • insert_at_beginning()
  • remove_at_beginning()
  • insert_at_end()
  • remove_at_end()
  • insert_at()
  • remove_at()
  • search()
  • ...
Структуры данных и алгоритмы на Python

Связные списки – insert_at_beginning

Изображение односвязного списка.

Структуры данных и алгоритмы на Python

Связные списки – insert_at_beginning

Изображение односвязного списка и нового узла.

 def insert_at_beginning(self, data):
    new_node = Node(data)

if self.head:
Структуры данных и алгоритмы на Python

Связные списки – insert_at_beginning

Изображение односвязного списка с подключённым новым узлом.

 def insert_at_beginning(self, data):
    new_node = Node(data)
    if self.head:
      new_node.next = self.head

Структуры данных и алгоритмы на Python

Связные списки – insert_at_beginning

Изображение односвязного списка с подключённым новым узлом и словом "HEAD" в этом узле.

 def insert_at_beginning(self, data):
    new_node = Node(data)
    if self.head:
      new_node.next = self.head
      self.head = new_node

Структуры данных и алгоритмы на Python

Связные списки – insert_at_beginning

Изображение нового узла в пустом связном списке.

 def insert_at_beginning(self, data):
    new_node = Node(data)
    if self.head:
      new_node.next = self.head
      self.head = new_node
    else:

self.tail = new_node self.head = new_node
Структуры данных и алгоритмы на Python

Связные списки – insert_at_end

  def insert_at_end(self, data):
    new_node = Node(data)
    if self.head:  

self.tail.next = new_node
self.tail = new_node
else:
self.head = new_node self.tail = new_node
Структуры данных и алгоритмы на Python

Связные списки – поиск

def search(self, data):

current_node = self.head
while current_node:
if current_node.data == data:
return True

Изображение односвязного списка со словом «current_node», указывающим на первый узел.

Структуры данных и алгоритмы на Python

Связные списки – поиск

def search(self, data):
  current_node = self.head
  while current_node:
    if current_node.data == data:
      return True
    else:
      current_node = current_node.next

Изображение односвязного списка со словом «current_node», указывающим на второй узел.

Структуры данных и алгоритмы на Python

Связные списки – поиск

def search(self, data):
  current_node = self.head
  while current_node:
    if current_node.data == data:
      return True
    else:
      current_node = current_node.next

return False

Изображение односвязного списка со словом «current_node», указывающим на третий узел.

Структуры данных и алгоритмы на Python

Связные списки – пример

Изображение нового узла в пустом связном списке.

sushi_preparation = LinkedList()

sushi_preparation.insert_at_end("prepare")
Структуры данных и алгоритмы на Python

Связные списки – пример

Изображение нового узла, добавленного в конец связного списка.

sushi_preparation = LinkedList()  
sushi_preparation.insert_at_end("prepare")
sushi_preparation.insert_at_end("roll") 

Структуры данных и алгоритмы на Python

Связные списки – пример

Изображение нового узла, добавленного в начало связного списка.

sushi_preparation = LinkedList()  
sushi_preparation.insert_at_end("prepare")
sushi_preparation.insert_at_end("roll") 
sushi_preparation.insert_at_beginning("assemble")
Структуры данных и алгоритмы на Python

Связные списки – пример

Изображение связного списка.

sushi_preparation.search("roll")
True
sushi_preparation.search("mixing")
False
Структуры данных и алгоритмы на Python

Давайте потренируемся!

Структуры данных и алгоритмы на Python

Preparing Video For Download...