Witamy!

Struktury danych i algorytmy w Pythonie

Miriam Antona

Software Engineer

Znaczenie algorytmów i struktur danych

  • Struktury danych i algorytmy pozwalają
    • rozwiązywać codzienne problemy
    • przy użyciu wydajnego kodu
  • Kurs można realizować w dowolnym języku programowania
Struktury danych i algorytmy w Pythonie

Algorytmy i struktury danych

  • Algorytm: zbiór instrukcji rozwiązujących problem

    1. Projektowanie

      Schematyczny obraz projektu algorytmu.

    2. Kod

      Schematyczny obraz kodu algorytmu.

  • Struktury danych: przechowują dane i operują na nich podczas wykonywania algorytmu
    • Zaawansowane struktury danych: listy powiązane, stosy, kolejki...
Struktury danych i algorytmy w Pythonie

Listy powiązane

Wizualny przykład listy powiązanej zawierającej kroki przygotowania chleba.

  • Sekwencja danych połączonych łączami
Struktury danych i algorytmy w Pythonie

Listy powiązane – struktura

Reprezentacja węzła listy powiązanej.

Struktury danych i algorytmy w Pythonie

Listy powiązane – struktura

Reprezentacja węzła listy powiązanej ze słowem "DATA" w pierwszej części.

Struktury danych i algorytmy w Pythonie

Listy powiązane – struktura

Reprezentacja węzła listy powiązanej ze słowami "DATA" w pierwszej części i "NEXT" ze wskaźnikiem w drugiej.

Struktury danych i algorytmy w Pythonie

Listy powiązane – struktura

Reprezentacja dwóch węzłów listy powiązanej połączonych łączem.

Struktury danych i algorytmy w Pythonie

Listy powiązane – struktura

Reprezentacja kilku węzłów listy powiązanej połączonych łączami.

Struktury danych i algorytmy w Pythonie

Listy powiązane – struktura

Reprezentacja listy powiązanej, w której ostatni węzeł wskazuje na null.

Struktury danych i algorytmy w Pythonie

Listy powiązane – struktura

Reprezentacja listy powiązanej ze słowem "HEAD" w pierwszym węźle.

Struktury danych i algorytmy w Pythonie

Listy powiązane – struktura

Reprezentacja listy powiązanej ze słowem "TAIL" w ostatnim węźle.

  • Dane nie muszą być przechowywane w ciągłych blokach pamięci
  • Dane mogą znajdować się pod dowolnym wolnym adresem pamięci
Struktury danych i algorytmy w Pythonie

Listy jednokierunkowe

Reprezentacja listy jednokierunkowej.

  • Jedno łącze: lista jednokierunkowa
Struktury danych i algorytmy w Pythonie

Listy dwukierunkowe

Reprezentacja listy dwukierunkowej.

  • Dwa łącza w obu kierunkach: lista dwukierunkowa
Struktury danych i algorytmy w Pythonie

Listy powiązane – zastosowania

  • Implementacja innych struktur danych:
    • stosy
    • kolejki
    • grafy
  • Dostęp do informacji przez nawigację wstecz i wprzód
    • przeglądarka internetowa
    • lista odtwarzania muzyki
Struktury danych i algorytmy w Pythonie

Listy powiązane – klasa Node

class Node:
  def __init__(self, data):
    self.data = data
    self.next = None
Struktury danych i algorytmy w Pythonie

Listy powiązane – klasa LinkedList

class LinkedList:
  def __init__(self):
    self.head = None
    self.tail = None
Struktury danych i algorytmy w Pythonie

Listy powiązane – metody

  • insert_at_beginning()
  • remove_at_beginning()
  • insert_at_end()
  • remove_at_end()
  • insert_at()
  • remove_at()
  • search()
  • ...
Struktury danych i algorytmy w Pythonie

Listy powiązane – insert_at_beginning

Reprezentacja listy jednokierunkowej.

Struktury danych i algorytmy w Pythonie

Listy powiązane – insert_at_beginning

Reprezentacja listy jednokierunkowej i nowego węzła.

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

if self.head:
Struktury danych i algorytmy w Pythonie

Listy powiązane – insert_at_beginning

Reprezentacja listy jednokierunkowej z podłączonym nowym węzłem.

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

Struktury danych i algorytmy w Pythonie

Listy powiązane – insert_at_beginning

Reprezentacja listy jednokierunkowej z podłączonym nowym węzłem i słowem "HEAD" w tym węźle.

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

Struktury danych i algorytmy w Pythonie

Listy powiązane – insert_at_beginning

Reprezentacja nowego węzła w pustej liście powiązanej.

 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
Struktury danych i algorytmy w Pythonie

Listy powiązane – 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
Struktury danych i algorytmy w Pythonie

Listy powiązane – search

def search(self, data):

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

Reprezentacja listy jednokierunkowej ze słowem "current_node" wskazującym na pierwszy węzeł.

Struktury danych i algorytmy w Pythonie

Listy powiązane – search

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

Reprezentacja listy jednokierunkowej ze słowem "current_node" wskazującym na drugi węzeł.

Struktury danych i algorytmy w Pythonie

Listy powiązane – search

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

Reprezentacja listy jednokierunkowej ze słowem "current_node" wskazującym na trzeci węzeł.

Struktury danych i algorytmy w Pythonie

Listy powiązane – przykład

Reprezentacja nowego węzła w pustej liście powiązanej.

sushi_preparation = LinkedList()

sushi_preparation.insert_at_end("prepare")
Struktury danych i algorytmy w Pythonie

Listy powiązane – przykład

Reprezentacja nowego węzła dodanego na końcu listy powiązanej.

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

Struktury danych i algorytmy w Pythonie

Listy powiązane – przykład

Reprezentacja nowego węzła dodanego na początku listy powiązanej.

sushi_preparation = LinkedList()  
sushi_preparation.insert_at_end("prepare")
sushi_preparation.insert_at_end("roll") 
sushi_preparation.insert_at_beginning("assemble")
Struktury danych i algorytmy w Pythonie

Listy powiązane – przykład

Reprezentacja listy powiązanej.

sushi_preparation.search("roll")
True
sushi_preparation.search("mixing")
False
Struktury danych i algorytmy w Pythonie

Czas na ćwiczenia!

Struktury danych i algorytmy w Pythonie

Preparing Video For Download...