Willkommen!

Datenstrukturen und Algorithmen in Python

Miriam Antona

Software Engineer

Warum Algorithmen und Datenstrukturen wichtig sind

  • Datenstrukturen und Algorithmen helfen uns,
    • Alltagsprobleme zu lösen
    • mit effizientem Code
  • Der Kurs kann in jeder Programmiersprache vermittelt werden
Datenstrukturen und Algorithmen in Python

Algorithmen und Datenstrukturen

  • Algorithmus: Folge von Anweisungen zur Lösung eines Problems

    1. Design

      Ein schematisches Bild eines Algorithmus-Designs.

    2. Code

      Ein schematisches Bild des Codes eines Algorithmus.

  • Datenstrukturen: halten und verarbeiten Daten während der Ausführung eines Algorithmus
    • Fortgeschrittene Datenstrukturen: verkettete Listen, Stacks, Queues ...
Datenstrukturen und Algorithmen in Python

Verkettete Listen

Ein visuelles Beispiel einer verketteten Liste, die die Schritte zur Brotherstellung enthält.

  • Abfolge von Daten, verbunden durch Links
Datenstrukturen und Algorithmen in Python

Verkettete Listen – Aufbau

Die Darstellung eines Knotens in einer verketteten Liste.

Datenstrukturen und Algorithmen in Python

Verkettete Listen – Aufbau

Die Darstellung eines Knotens in einer verketteten Liste mit dem Wort "DATA" im ersten Teil.

Datenstrukturen und Algorithmen in Python

Verkettete Listen – Aufbau

Die Darstellung eines Knotens in einer verketteten Liste mit den Wörtern "DATA" im ersten Teil und "NEXT" mit einem Zeiger im zweiten Teil.

Datenstrukturen und Algorithmen in Python

Verkettete Listen – Aufbau

Die Darstellung von zwei Knoten einer verketteten Liste, verbunden durch einen Link.

Datenstrukturen und Algorithmen in Python

Verkettete Listen – Aufbau

Die Darstellung mehrerer Knoten einer verketteten Liste, verbunden durch Links.

Datenstrukturen und Algorithmen in Python

Verkettete Listen – Aufbau

Die Darstellung einer verketteten Liste, bei der der letzte Knoten auf null zeigt.

Datenstrukturen und Algorithmen in Python

Verkettete Listen – Aufbau

Die Darstellung einer verketteten Liste mit dem Wort "HEAD" im ersten Knoten.

Datenstrukturen und Algorithmen in Python

Verkettete Listen – Aufbau

Die Darstellung einer verketteten Liste mit dem Wort "TAIL" im letzten Knoten.

  • Daten müssen nicht in zusammenhängenden Speicherblöcken liegen
  • Daten können an beliebigen Speicheradressen liegen
Datenstrukturen und Algorithmen in Python

Einfach verkettete Listen

Die Darstellung einer einfach verketteten Liste.

  • Ein Link: einfach verkettete Liste
Datenstrukturen und Algorithmen in Python

Doppelt verkettete Listen

Die Darstellung einer doppelt verketteten Liste.

  • Zwei Links in beide Richtungen: doppelt verkettete Liste
Datenstrukturen und Algorithmen in Python

Verkettete Listen – echte Anwendungen

  • Andere Datenstrukturen umsetzen:
    • Stacks
    • Queues
    • Graphen
  • Infos vor- und rückwärts durchlaufen
    • Webbrowser
    • Musik-Playlist
Datenstrukturen und Algorithmen in Python

Verkettete Listen – Klasse Node

class Node:
  def __init__(self, data):
    self.data = data
    self.next = None
Datenstrukturen und Algorithmen in Python

Verkettete Listen – Klasse LinkedList

class LinkedList:
  def __init__(self):
    self.head = None
    self.tail = None
Datenstrukturen und Algorithmen in Python

Verkettete Listen – Methoden

  • insert_at_beginning()
  • remove_at_beginning()
  • insert_at_end()
  • remove_at_end()
  • insert_at()
  • remove_at()
  • search()
  • ...
Datenstrukturen und Algorithmen in Python

Verkettete Listen – insert_at_beginning

Die Darstellung einer einfach verketteten Liste.

Datenstrukturen und Algorithmen in Python

Verkettete Listen – insert_at_beginning

Die Darstellung einer einfach verketteten Liste und eines neuen Knotens,

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

if self.head:
Datenstrukturen und Algorithmen in Python

Verkettete Listen – insert_at_beginning

Die Darstellung einer einfach verketteten Liste mit verbundenem neuem Knoten.

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

Datenstrukturen und Algorithmen in Python

Verkettete Listen – insert_at_beginning

Die Darstellung einer einfach verketteten Liste mit verbundenem neuem Knoten und dem Wort "HEAD" in diesem Knoten.

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

Datenstrukturen und Algorithmen in Python

Verkettete Listen – insert_at_beginning

Die Darstellung eines neuen Knotens in einer leeren verketteten Liste.

 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
Datenstrukturen und Algorithmen in Python

Verkettete Listen – 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
Datenstrukturen und Algorithmen in Python

Verkettete Listen – search

def search(self, data):

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

Die Darstellung einer einfach verketteten Liste mit dem Wort "current_node", das auf den ersten Knoten zeigt.

Datenstrukturen und Algorithmen in Python

Verkettete Listen – 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

Die Darstellung einer einfach verketteten Liste mit dem Wort "current_node", das auf den zweiten Knoten zeigt.

Datenstrukturen und Algorithmen in Python

Verkettete Listen – 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

Die Darstellung einer einfach verketteten Liste mit dem Wort "current_node", das auf den dritten Knoten zeigt.

Datenstrukturen und Algorithmen in Python

Verkettete Listen – Beispiel

Die Darstellung eines neuen Knotens in einer leeren verketteten Liste.

sushi_preparation = LinkedList()

sushi_preparation.insert_at_end("prepare")
Datenstrukturen und Algorithmen in Python

Verkettete Listen – Beispiel

Die Darstellung eines neuen Knotens, der am Ende einer verketteten Liste hinzugefügt wurde.

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

Datenstrukturen und Algorithmen in Python

Verkettete Listen – Beispiel

Die Darstellung eines neuen Knotens, der am Anfang einer verketteten Liste hinzugefügt wurde.

sushi_preparation = LinkedList()  
sushi_preparation.insert_at_end("prepare")
sushi_preparation.insert_at_end("roll") 
sushi_preparation.insert_at_beginning("assemble")
Datenstrukturen und Algorithmen in Python

Verkettete Listen – Beispiel

Die Darstellung einer verketteten Liste.

sushi_preparation.search("roll")
True
sushi_preparation.search("mixing")
False
Datenstrukturen und Algorithmen in Python

Lass uns üben!

Datenstrukturen und Algorithmen in Python

Preparing Video For Download...