From 73c2d4f79f1f2a23d87db59fbade9db8bc43b20e Mon Sep 17 00:00:00 2001
From: wienkop <uwe.wienkop@th-nuernberg.de>
Date: Mon, 19 Apr 2021 13:03:07 +0200
Subject: [PATCH] =?UTF-8?q?2021-04-19=20Intro=20bin=C3=A4re=20B=C3=A4ume?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 04-2 DoppeltVerketteteListe/Personenliste.cs |  8 ++
 04-2 DoppeltVerketteteListe/Program.cs       |  1 +
 05-1 BinTree/05-1 BinTree.csproj             |  9 +++
 05-1 BinTree/BinTree.cs                      | 63 +++++++++++++++
 05-1 BinTree/Program.cs                      | 17 ++++
 05-UbgCycleList-Mo/CycleList.cs              | 81 +++++++++++++++++---
 05-UbgCycleList-Mo/Program.cs                | 15 +++-
 Prog2WienkopSS2021.sln                       |  8 +-
 8 files changed, 191 insertions(+), 11 deletions(-)
 create mode 100644 05-1 BinTree/05-1 BinTree.csproj
 create mode 100644 05-1 BinTree/BinTree.cs
 create mode 100644 05-1 BinTree/Program.cs

diff --git a/04-2 DoppeltVerketteteListe/Personenliste.cs b/04-2 DoppeltVerketteteListe/Personenliste.cs
index bd6c809..b2a61f8 100644
--- a/04-2 DoppeltVerketteteListe/Personenliste.cs	
+++ b/04-2 DoppeltVerketteteListe/Personenliste.cs	
@@ -140,5 +140,13 @@ namespace _04_2_DoppeltVerketteteListe
             }
             Console.WriteLine("-------------------");
         }
+        public void PrintReverse()
+        {
+            for (LItem item = last; item != null; item = item.prev)
+            {
+                Console.WriteLine(item.name);
+            }
+            Console.WriteLine("-------------------");
+        }
     }
 }
diff --git a/04-2 DoppeltVerketteteListe/Program.cs b/04-2 DoppeltVerketteteListe/Program.cs
index 91e9ad8..00e13d6 100644
--- a/04-2 DoppeltVerketteteListe/Program.cs	
+++ b/04-2 DoppeltVerketteteListe/Program.cs	
@@ -15,6 +15,7 @@ namespace _04_2_DoppeltVerketteteListe
 
             freunde.DeleteByName("Berta");
             freunde.Print();
+            freunde.PrintReverse();
         }
     }
 }
diff --git a/05-1 BinTree/05-1 BinTree.csproj b/05-1 BinTree/05-1 BinTree.csproj
new file mode 100644
index 0000000..7efde34
--- /dev/null
+++ b/05-1 BinTree/05-1 BinTree.csproj	
@@ -0,0 +1,9 @@
+<Project Sdk="Microsoft.NET.Sdk">
+
+  <PropertyGroup>
+    <OutputType>Exe</OutputType>
+    <TargetFramework>netcoreapp3.1</TargetFramework>
+    <RootNamespace>_05_1_BinTree</RootNamespace>
+  </PropertyGroup>
+
+</Project>
diff --git a/05-1 BinTree/BinTree.cs b/05-1 BinTree/BinTree.cs
new file mode 100644
index 0000000..8392dd6
--- /dev/null
+++ b/05-1 BinTree/BinTree.cs	
@@ -0,0 +1,63 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace _05_1_BinTree
+{
+    class BinTree
+    {
+        class BItem
+        {
+            public int number;
+            public BItem left = null, right = null;
+            public BItem (int Number) { number = Number; }
+        }
+        BItem root = null;
+
+        public void BInsert(int Number)
+        {
+            BItem newItem = new BItem(Number);
+            if (root == null)
+                root = newItem;
+            else
+            {
+                bool done = false;
+                BItem item = root;
+                do
+                {
+                    if (Number < item.number) // linker Teilbaum
+                    {
+                        if (item.left == null)
+                        {
+                            item.left = newItem;
+                            done = true;
+                        }
+                        else
+                            item = item.left;
+                    }
+                    else
+                    {
+                        if (item.right == null)
+                        {
+                            item.right = newItem;
+                            done = true;
+                        }
+                        else
+                            item = item.right;
+                    }
+                } while (!done);
+            }
+        }
+        public bool FindItem(int Number)
+        {
+            BItem item = root;
+            while (item != null)
+            {
+                if (Number == item.number)
+                    return true;
+                item = (Number < item.number) ? item.left : item.right;
+            }
+            return false;
+        }
+    }
+}
diff --git a/05-1 BinTree/Program.cs b/05-1 BinTree/Program.cs
new file mode 100644
index 0000000..73d6c66
--- /dev/null
+++ b/05-1 BinTree/Program.cs	
@@ -0,0 +1,17 @@
+using System;
+
+namespace _05_1_BinTree
+{
+    class Program
+    {
+        static void Main(string[] args)
+        {
+            BinTree bt = new BinTree();
+            bt.BInsert(50);
+            bt.BInsert(80);
+            bt.BInsert(30);
+            bt.BInsert(40);
+            bt.BInsert(60);
+        }
+    }
+}
diff --git a/05-UbgCycleList-Mo/CycleList.cs b/05-UbgCycleList-Mo/CycleList.cs
index 8047125..ac6ddee 100644
--- a/05-UbgCycleList-Mo/CycleList.cs
+++ b/05-UbgCycleList-Mo/CycleList.cs
@@ -11,19 +11,82 @@ namespace _05_UbgCycleList_Mo
     // Methoden:
     class CycleList
     {
+        class LItem
+        {
+            public string name;
+            public LItem prev=null, next = null;
+            public LItem(string Name) { name = Name; }
+        }
+        LItem first = null, last = null;
+        LItem iterator = null;
+
         public void AddEnd(string Name) // wie bisher
-        { }
+        {
+            LItem newItem = new LItem(Name);
+
+            if (first == null)
+                first = last = newItem;
+            else  // Es gibt schon Listenelemente
+            {
+                newItem.prev = last;
+                last.next = newItem;
+                last = newItem;
+                first.prev = null;
+            }
+        }
         public void CloseCycle() // letztes mit dem ersten Element verbinden
-        { }
+        { 
+            if (first != null)
+            {
+                last.next = first;
+                first.prev = last;
+            }
+
+        }
         public void Print()
-        { }
+        {
+            if (first == null)
+                return;
+            
+            LItem item = first;
+            do
+            {
+                Console.WriteLine(item.name);
+                item = item.next;
+                // Ende, gdw. item == null oder item == first
+            } while (!(item == null || item == first));
+        }
+        public IEnumerator<string> GetEnumerator()
+        {
+            if (first != null)
+            {
+                LItem item = first;
+                do
+                {
+                    yield return item.name;
+                    item = item.next;
+                    // Ende, gdw. item == null oder item == first
+                } while (!(item == null || item == first));
+            }
+        }
         public void SetIterator(int offset = 0) // Einen internen Zeiger (Iterator) auf das (anfang+offset) Listenelement setzen
-        { }
+        {
+            if (first == null)
+                iterator = null;
+            else
+            {
+                iterator = first;
+                for (int i = 0; i < offset; i++)
+                    iterator = iterator.next;
+            }
+        }
         public string GetName() // Den string zurückliefern, der im Iterator-Listenelement gespeichert ist
-        { }
-        public void MoveToNext()
-        { }
-        public void MoveToPrev()
-        { }
+        {
+            return iterator.name;
+        }
+        public void MoveToNext() { iterator = iterator.next; }
+        public void MoveToPrev() { iterator = iterator.prev; }
+
+        
     }
 }
diff --git a/05-UbgCycleList-Mo/Program.cs b/05-UbgCycleList-Mo/Program.cs
index 21f2f21..b35ff86 100644
--- a/05-UbgCycleList-Mo/Program.cs
+++ b/05-UbgCycleList-Mo/Program.cs
@@ -10,7 +10,7 @@ namespace _05_UbgCycleList_Mo
             cl.Print();
             cl.AddEnd("Anton");
             cl.AddEnd("Berta");
-            cl.CloseCycle();
+            //cl.CloseCycle();
             cl.Print();
             Console.WriteLine("-------------");
             cl.AddEnd("Claudia");
@@ -25,6 +25,19 @@ namespace _05_UbgCycleList_Mo
                 Console.WriteLine(cl.GetName());
                 cl.MoveToNext();
             }
+            Console.WriteLine("-------------");
+            for (int i = 0; i < 5; i++)
+            {
+                Console.WriteLine(cl.GetName());
+                cl.MoveToPrev();
+            }
+
+
+            Console.WriteLine("************");
+            foreach (var item in cl)
+            {
+                Console.WriteLine(item);
+            }
         }
     }
 }
diff --git a/Prog2WienkopSS2021.sln b/Prog2WienkopSS2021.sln
index 089a74f..f17d85e 100644
--- a/Prog2WienkopSS2021.sln
+++ b/Prog2WienkopSS2021.sln
@@ -31,7 +31,9 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "04-UbgCycleList-Di", "04-Ub
 EndProject
 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "04-2 DoppeltVerketteteListe", "04-2 DoppeltVerketteteListe\04-2 DoppeltVerketteteListe.csproj", "{A253CA17-DA49-47FB-B8A6-C24D84C9A3E6}"
 EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "05-UbgCycleList-Mo", "05-UbgCycleList-Mo\05-UbgCycleList-Mo.csproj", "{69264CD7-160B-45D5-8880-703EEBD6D7C2}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "05-UbgCycleList-Mo", "05-UbgCycleList-Mo\05-UbgCycleList-Mo.csproj", "{69264CD7-160B-45D5-8880-703EEBD6D7C2}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "05-1 BinTree", "05-1 BinTree\05-1 BinTree.csproj", "{7C9FA089-4364-4326-A973-99FD15DAFBC1}"
 EndProject
 Global
 	GlobalSection(SolutionConfigurationPlatforms) = preSolution
@@ -99,6 +101,10 @@ Global
 		{69264CD7-160B-45D5-8880-703EEBD6D7C2}.Debug|Any CPU.Build.0 = Debug|Any CPU
 		{69264CD7-160B-45D5-8880-703EEBD6D7C2}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{69264CD7-160B-45D5-8880-703EEBD6D7C2}.Release|Any CPU.Build.0 = Release|Any CPU
+		{7C9FA089-4364-4326-A973-99FD15DAFBC1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{7C9FA089-4364-4326-A973-99FD15DAFBC1}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{7C9FA089-4364-4326-A973-99FD15DAFBC1}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{7C9FA089-4364-4326-A973-99FD15DAFBC1}.Release|Any CPU.Build.0 = Release|Any CPU
 	EndGlobalSection
 	GlobalSection(SolutionProperties) = preSolution
 		HideSolutionNode = FALSE
-- 
GitLab