Välkommen!

Datastrukturer och algoritmer i Python

Miriam Antona

Software Engineer

Vikten av algoritmer och datastrukturer

  • Datastrukturer och algoritmer gör det möjligt att
    • lösa vardagliga problem
    • med effektiv kod
  • Kursen kan ges i vilket programmeringsspråk som helst
Datastrukturer och algoritmer i Python

Algoritmer och datastrukturer

  • Algoritm: en uppsättning instruktioner som löser ett problem

    1. Design

      En schematisk bild av en algoritmdesign.

    2. Kod

      En schematisk bild av koden för en algoritm.

  • Datastrukturer: lagrar och hanterar data när vi kör en algoritm
    • Avancerade datastrukturer: länkade listor, stackar, köer...
Datastrukturer och algoritmer i Python

Länkade listor

Ett visuellt exempel på en länkad lista med stegen för att baka bröd.

  • En sekvens av data som är sammankopplad via länkar
Datastrukturer och algoritmer i Python

Länkade listor – struktur

En illustration av en nod i en länkad lista.

Datastrukturer och algoritmer i Python

Länkade listor – struktur

En illustration av en nod i en länkad lista med ordet "DATA" i den första delen.

Datastrukturer och algoritmer i Python

Länkade listor – struktur

En illustration av en nod i en länkad lista med ordet "DATA" i den första delen och "NEXT" med en pekare i den andra delen.

Datastrukturer och algoritmer i Python

Länkade listor – struktur

En illustration av två noder i en länkad lista sammankopplade med en länk.

Datastrukturer och algoritmer i Python

Länkade listor – struktur

En illustration av flera noder i en länkad lista sammankopplade med länkar.

Datastrukturer och algoritmer i Python

Länkade listor – struktur

En illustration av en länkad lista där den sista noden pekar på null.

Datastrukturer och algoritmer i Python

Länkade listor – struktur

En illustration av en länkad lista med ordet "HEAD" i den första noden.

Datastrukturer och algoritmer i Python

Länkade listor – struktur

En illustration av en länkad lista med ordet "TAIL" i den sista noden.

  • Data behöver inte lagras i sammanhängande minnesblock
  • Data kan finnas på valfri ledig minnesadress
Datastrukturer och algoritmer i Python

Enkellänkade listor

En illustration av en enkellänkad lista.

  • En länk: enkellänkad lista
Datastrukturer och algoritmer i Python

Dubbellänkade listor

En illustration av en dubbellänkad lista.

  • Två länkar i vardera riktning: dubbellänkad lista
Datastrukturer och algoritmer i Python

Länkade listor – praktiska användningsområden

  • Implementera andra datastrukturer:
    • stackar
    • köer
    • grafer
  • Navigera bakåt och framåt i information
    • webbläsare
    • musikspellistor
Datastrukturer och algoritmer i Python

Länkade listor – Node-klassen

class Node:
  def __init__(self, data):
    self.data = data
    self.next = None
Datastrukturer och algoritmer i Python

Länkade listor – LinkedList-klassen

class LinkedList:
  def __init__(self):
    self.head = None
    self.tail = None
Datastrukturer och algoritmer i Python

Länkade listor – metoder

  • insert_at_beginning()
  • remove_at_beginning()
  • insert_at_end()
  • remove_at_end()
  • insert_at()
  • remove_at()
  • search()
  • ...
Datastrukturer och algoritmer i Python

Länkade listor – insert_at_beginning

En illustration av en enkellänkad lista.

Datastrukturer och algoritmer i Python

Länkade listor – insert_at_beginning

En illustration av en enkellänkad lista och en ny nod,

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

if self.head:
Datastrukturer och algoritmer i Python

Länkade listor – insert_at_beginning

En illustration av en enkellänkad lista med den nya noden ansluten.

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

Datastrukturer och algoritmer i Python

Länkade listor – insert_at_beginning

En illustration av en enkellänkad lista med den nya noden ansluten och ordet "HEAD" i denna nod.

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

Datastrukturer och algoritmer i Python

Länkade listor – insert_at_beginning

En illustration av en ny nod i en tom länkad lista.

 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
Datastrukturer och algoritmer i Python

Länkade listor – 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
Datastrukturer och algoritmer i Python

Länkade listor – search

def search(self, data):

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

En illustration av en enkellänkad lista med ordet "current_node" som pekar på den första noden.

Datastrukturer och algoritmer i Python

Länkade listor – 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

En illustration av en enkellänkad lista med ordet "current_node" som pekar på den andra noden.

Datastrukturer och algoritmer i Python

Länkade listor – 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

En illustration av en enkellänkad lista med ordet "current_node" som pekar på den tredje noden.

Datastrukturer och algoritmer i Python

Länkade listor – exempel

En illustration av en ny nod i en tom länkad lista.

sushi_preparation = LinkedList()

sushi_preparation.insert_at_end("prepare")
Datastrukturer och algoritmer i Python

Länkade listor – exempel

En illustration av en ny nod tillagd i slutet av en länkad lista.

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

Datastrukturer och algoritmer i Python

Länkade listor – exempel

En illustration av en ny nod tillagd i början av en länkad lista.

sushi_preparation = LinkedList()  
sushi_preparation.insert_at_end("prepare")
sushi_preparation.insert_at_end("roll") 
sushi_preparation.insert_at_beginning("assemble")
Datastrukturer och algoritmer i Python

Länkade listor – exempel

En illustration av en länkad lista.

sushi_preparation.search("roll")
True
sushi_preparation.search("mixing")
False
Datastrukturer och algoritmer i Python

Nu kör vi en övning!

Datastrukturer och algoritmer i Python

Preparing Video For Download...