diff --git a/05-seznamy/jednosmerne-na-konec.py b/05-seznamy/jednosmerne-na-konec.py new file mode 100755 index 0000000000000000000000000000000000000000..b83207d1b3d346026b296f9600b29d4c9e2e3a4c --- /dev/null +++ b/05-seznamy/jednosmerne-na-konec.py @@ -0,0 +1,37 @@ +#!/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() diff --git a/05-seznamy/jednosmerne-na-zacatek.py b/05-seznamy/jednosmerne-na-zacatek.py new file mode 100755 index 0000000000000000000000000000000000000000..2e7ea21b3ed580e866883035b9cbb26203335212 --- /dev/null +++ b/05-seznamy/jednosmerne-na-zacatek.py @@ -0,0 +1,33 @@ +#!/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() diff --git a/05-seznamy/obousmerne.py b/05-seznamy/obousmerne.py new file mode 100755 index 0000000000000000000000000000000000000000..4aba29035c960a8a11cf2a044eb59a737ef42131 --- /dev/null +++ b/05-seznamy/obousmerne.py @@ -0,0 +1,55 @@ +#!/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()