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