Werken met stacks

Datastructuren en algoritmen in Python

Miriam Antona

Software Engineer

Stacks

  • LIFO: Last-In First-Out
    • Laatst toegevoegd wordt als eerste verwijderd

Een stapel boeken.

Datastructuren en algoritmen in Python

Stacks

  • LIFO: Last-In First-Out
    • Laatst toegevoegd wordt als eerste verwijderd
  • Alleen toevoegen aan de top
    • PUSH op de stack

Een stapel boeken met een nieuw boek bovenop.

Datastructuren en algoritmen in Python

Stacks

  • LIFO: Last-In First-Out
    • Laatst toegevoegd wordt als eerste verwijderd
  • Alleen toevoegen aan de top
    • PUSH op de stack
  • Alleen nemen van de top
    • POP van de stack

Een stapel boeken met een boek van de top gehaald.

Datastructuren en algoritmen in Python

Stacks

  • LIFO: Last-In First-Out
    • Laatst toegevoegd wordt als eerste verwijderd
  • Alleen toevoegen aan de top
    • PUSH op de stack
  • Alleen verwijderen van de top
    • POP van de stack
  • Alleen lezen van het laatste element
    • PEEK op de stack

Een stapel boeken met een pijl naar het boek bovenop.

Datastructuren en algoritmen in Python

Stacks - echte toepassingen

  • Ongedaan maken-functie

Een stack met één element.

Datastructuren en algoritmen in Python

Stacks - echte toepassingen

  • Ongedaan maken-functie
    • push elke toetsaanslag

Een stack met een nieuw element bovenop.

Datastructuren en algoritmen in Python

Stacks - echte toepassingen

  • Ongedaan maken-functie
    • push elke toetsaanslag

Een stack met een nieuw element bovenop.

Datastructuren en algoritmen in Python

Stacks - echte toepassingen

  • Ongedaan maken-functie
    • push elke toetsaanslag

Een stack met een nieuw element bovenop.

Datastructuren en algoritmen in Python

Stacks - echte toepassingen

  • Ongedaan maken-functie
    • push elke toetsaanslag

Een stack met een nieuw element bovenop.

Datastructuren en algoritmen in Python

Stacks - echte toepassingen

  • Ongedaan maken-functie
    • push elke toetsaanslag
    • pop laatste toetsaanslag

Een stack waar een element van de top is verwijderd.

Datastructuren en algoritmen in Python

Stacks - echte toepassingen

  • Symboolcontrole: ( [ { } ] )
    • push openingssymbolen

Een stack met een openingssymbool.

Datastructuren en algoritmen in Python

Stacks - echte toepassingen

  • Symboolcontrole: ( [ { } ] )
    • push openingssymbolen

Een stack met een nieuw openingssymbool bovenop.

Datastructuren en algoritmen in Python

Stacks - echte toepassingen

  • Symboolcontrole: ( [ { } ] )
    • push openingssymbolen

Een stack met een nieuw openingssymbool bovenop.

Datastructuren en algoritmen in Python

Stacks - echte toepassingen

  • Symboolcontrole: ( [ { } ] )
    • push openingssymbolen
    • check eindsymbool

Een stack met openingssymbolen en het woord "check "}"".

Datastructuren en algoritmen in Python

Stacks - echte toepassingen

  • Symboolcontrole: ( [ { } ] )
    • push openingssymbolen
    • check eindsymbool
    • pop bij passend openingssymbool

Een stack waar een openingsymbool van de top is verwijderd.

Datastructuren en algoritmen in Python

Stacks - echte toepassingen

  • Functieaanroepen
    • push geheugenblok
    • pop na einde uitvoering
Datastructuren en algoritmen in Python

Stacks - implementatie met enkelvoudig gelinkte lijsten

Een stack voorgesteld als een gelinkte lijst.

class Node:
  def __init__(self,data):
    self.data = data
    self.next = None
Datastructuren en algoritmen in Python

Stacks - implementatie met enkelvoudig gelinkte lijsten

Een stack als gelinkte lijst met de namen van de delen van de nodes.

class Node:
  def __init__(self,data):
    self.data = data
    self.next = None
class Stack:
  def __init__(self):
    self.top = None
Datastructuren en algoritmen in Python

Stacks - implementatie met enkelvoudig gelinkte lijsten

Een stack als gelinkte lijst met het woord "TOP" naar de top.

class Node:
  def __init__(self,data):
    self.data = data
    self.next = None
class Stack:
  def __init__(self):
    self.top = None
Datastructuren en algoritmen in Python

Stacks - push

Een lege stack en een stack met elementen.

def push(self, data):




Datastructuren en algoritmen in Python

Stacks - push

Een lege stack en een stack waar een nieuwe node wordt ingevoegd.

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

if self.top:
Datastructuren en algoritmen in Python

Stacks - push

Een lege stack en een stack waar de nieuwe node is verbonden met de top.

def push(self, data): 
  new_node = Node(data)
  if self.top:

new_node.next = self.top
Datastructuren en algoritmen in Python

Stacks - push

Een lege stack en een stack waar de nieuwe node is ingevoegd.

def push(self, data): 
  new_node = Node(data)
  if self.top:
    new_node.next = self.top
  self.top = new_node
Datastructuren en algoritmen in Python

Stacks - pop

def pop(self):

if self.top is None:
return None
else:

Een stack met het woord "TOP" bij de bovenste node.

Datastructuren en algoritmen in Python

Stacks - pop

def pop(self):
  if self.top is None:
    return None
  else:
    popped_node = self.top



Een stack met "popped_node" bij de bovenste node.

Datastructuren en algoritmen in Python

Stacks - pop

def pop(self):
  if self.top is None:
    return None
  else:
    popped_node = self.top
    self.top = self.top.next


Een stack met "popped_node" bij de bovenste node en "TOP" bij de tweede node.

Datastructuren en algoritmen in Python

Stacks - pop

def pop(self):
  if self.top is None:
    return None
  else:
    popped_node = self.top
    self.top = self.top.next
    popped_node.next = None

Een stack met "popped_node" bij een losgekoppelde node en "TOP" bij de bovenste node.

Datastructuren en algoritmen in Python

Stacks - pop

def pop(self):
  if self.top is None:
    return None
  else:
    popped_node = self.top
    self.top = self.top.next
    popped_node.next = None
    return popped_node.data 

Een stack met het woord "TOP" bij de bovenste node.

Datastructuren en algoritmen in Python

Stacks - peek

def peek(self):

if self.top:
return self.top.data
else:
return None
Datastructuren en algoritmen in Python

LifoQueue in Python

  • LifoQueue:
    • Python’s queue-module
    • gedraagt zich als een stack
import queue


my_book_stack = queue.LifoQueue(maxsize=0)
my_book_stack.put("The misunderstanding") my_book_stack.put("Persepolis") my_book_stack.put("1984")
print("The size is: ", my_book_stack.qsize())
The size is: 3
print(my_book_stack.get())
print(my_book_stack.get())
print(my_book_stack.get())
1984
Persepolis
The misunderstanding
print("Empty stack: ", my_book_stack.empty())
Empty stack: True
Datastructuren en algoritmen in Python

Laten we oefenen!

Datastructuren en algoritmen in Python

Preparing Video For Download...