Commit b4f56ff7 authored by Martin Mareš's avatar Martin Mareš
Browse files

Příklady na spojové seznamy

parent ff001845
#!/usr/bin/python3
# Obousměrné spojové seznamy s předáváním na konec
import sys
class MyNode:
def __init__(self, x):
# Každy prvek si pamatuje hodnotu a následníka
self.value = x
self.next = None
class MyList:
def __init__(self):
# Seznam si pamatuje odkaz na svůj první a poslední prvek
self.first = None
self.last = None
def append(self, x):
"""Zapojí prvek se zadanou hodnotu na konec seznamu."""
n = MyNode(x)
if self.last:
self.last.next = n
else:
self.first = n
self.last = n
def print(self):
n = self.first
while n:
print(n.value)
n = n.next
l = MyList()
for a in sys.stdin:
l.append(int(a))
l.print()
#!/usr/bin/python3
# Obousměrné spojové seznamy s předáváním na začátek
import sys
class MyNode:
def __init__(self, x):
# Každy prvek si pamatuje hodnotu a následníka
self.value = x
self.next = None
class MyList:
def __init__(self):
# Seznam si pamatuje odkaz na svůj první prvek
self.first = None
def prepend(self, x):
"""Zapojí prvek se zadanou hodnotu na začátek seznamu."""
n = MyNode(x)
n.next = self.first
self.first = n
def print(self):
n = self.first
while n:
print(n.value)
n = n.next
l = MyList()
for a in sys.stdin:
l.prepend(int(a))
l.print()
#!/usr/bin/python3
# Obousměrné spojové seznamy s hlavou
import sys
class MyNode:
def __init__(self, x):
# Prvek si pamatuje hodnotu a odkaz na předchůdce i následníka
self.value = x
self.prev = None
self.next = None
class MyList:
def __init__(self):
# Seznam vždy držíme za hlavu: speciální prvek, který nenese žádnou
# užitečnou hodnotu.
self.head = MyNode(None)
self.head.prev = self.head.next = self.head
def insert_node(self, n, after):
"""Zapojí prvek n za prvek after."""
before = after.next # Pozor, before se může rovnat after
n.prev = after
n.next = before
before.prev = n
after.next = n
def prepend_node(self, n):
"""Zapojí prvek n na začátek seznamu (za hlavu)."""
self.insert_node(n, self.head)
def append_node(self, n):
"""Zapojí prvek n na konec seznamu (tedy za předchůdce hlavy)."""
self.insert_node(n, self.head.prev)
def prepend(self, x):
"""Zapojí prvek se zadanou hodnotu na začátek seznamu."""
return self.prepend_node(MyNode(x))
def append(self, x):
"""Zapojí prvek se zadanou hodnotu na konec seznamu."""
return self.append_node(MyNode(x))
def print(self):
n = self.head.next
while n != self.head:
print(n.value)
n = n.next
l = MyList()
for a in sys.stdin:
l.prepend(int(a))
l.append(int(a))
l.print()
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment