From b4f56ff7a4754879e0e005b638ff04764b22f8ad Mon Sep 17 00:00:00 2001 From: Martin Mares <mj@ucw.cz> Date: Wed, 25 Mar 2020 00:25:45 +0100 Subject: [PATCH] =?UTF-8?q?P=C5=99=C3=ADklady=20na=20spojov=C3=A9=20seznam?= =?UTF-8?q?y?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 05-seznamy/jednosmerne-na-konec.py | 37 +++++++++++++++++++ 05-seznamy/jednosmerne-na-zacatek.py | 33 +++++++++++++++++ 05-seznamy/obousmerne.py | 55 ++++++++++++++++++++++++++++ 3 files changed, 125 insertions(+) create mode 100755 05-seznamy/jednosmerne-na-konec.py create mode 100755 05-seznamy/jednosmerne-na-zacatek.py create mode 100755 05-seznamy/obousmerne.py diff --git a/05-seznamy/jednosmerne-na-konec.py b/05-seznamy/jednosmerne-na-konec.py new file mode 100755 index 0000000..b83207d --- /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 0000000..2e7ea21 --- /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 0000000..4aba290 --- /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() -- GitLab