From abe28beb73e106248e51f35e99e44809b9239f99 Mon Sep 17 00:00:00 2001
From: wienkop <uwe.wienkop@th-nuernberg.de>
Date: Mon, 19 Apr 2021 10:00:31 +0200
Subject: [PATCH] =?UTF-8?q?2021-04-19=20=C3=9Cbungsvorlage?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 04-2 DoppeltVerketteteListe/Personenliste.cs | 22 ++++++++++++++
 04-2 DoppeltVerketteteListe/Program.cs       |  7 +++--
 05-UbgCycleList-Mo/05-UbgCycleList-Mo.csproj |  9 ++++++
 05-UbgCycleList-Mo/CycleList.cs              | 29 +++++++++++++++++++
 05-UbgCycleList-Mo/Program.cs                | 30 ++++++++++++++++++++
 Prog2WienkopSS2021.sln                       | 10 +++++--
 6 files changed, 102 insertions(+), 5 deletions(-)
 create mode 100644 05-UbgCycleList-Mo/05-UbgCycleList-Mo.csproj
 create mode 100644 05-UbgCycleList-Mo/CycleList.cs
 create mode 100644 05-UbgCycleList-Mo/Program.cs

diff --git a/04-2 DoppeltVerketteteListe/Personenliste.cs b/04-2 DoppeltVerketteteListe/Personenliste.cs
index 40213d5..bd6c809 100644
--- a/04-2 DoppeltVerketteteListe/Personenliste.cs	
+++ b/04-2 DoppeltVerketteteListe/Personenliste.cs	
@@ -47,7 +47,29 @@ namespace _04_2_DoppeltVerketteteListe
                 first = newItem;
             }
         }
+        public void AddSorted(string InsName)
+        {
+            // 1. Fall: Leere Liste oder Anfügen am Listenende
+            if (first == null || last.name.CompareTo(InsName) <= 0)
+                AddEnd(InsName);
+            else if (InsName.CompareTo(first.name) <= 0) 
+                // 2. Fall: Anfügen am Listenende
+                AddFront(InsName);
+            else
+            {
+                // Wir wissen: Das neue Element ist NICHT das erste und nicht das letzte Element
+                LItem newItem = new LItem(InsName);
 
+                LItem item = first;
+                while (item.next.name.CompareTo(InsName) < 0)
+                    item = item.next;
+                // bis hierher identisch zur einfach-verketteten Liste
+                newItem.next = item.next; // Vorwärtsverkettung vom neuen Element zur Restliste
+                newItem.prev = item;      // Rückwärtsverkettung vom neuen Elenent zum Listenanfangsstück
+                item.next.prev = newItem; // Rückwärtsverkettung vom nachfolgenden Listenelement
+                item.next = newItem;      // Vorwärtsverkettung zum neuen Element
+            }
+        }
         public void DeleteFirst()
         {
             // Fall 1: Liste ist leer
diff --git a/04-2 DoppeltVerketteteListe/Program.cs b/04-2 DoppeltVerketteteListe/Program.cs
index 7e81e21..91e9ad8 100644
--- a/04-2 DoppeltVerketteteListe/Program.cs	
+++ b/04-2 DoppeltVerketteteListe/Program.cs	
@@ -7,9 +7,10 @@ namespace _04_2_DoppeltVerketteteListe
         static void Main(string[] args)
         {
             Personenliste freunde = new Personenliste();
-            freunde.AddEnd("Anton");
-            freunde.AddEnd("Berta");
-            freunde.AddEnd("Claudia");
+            freunde.AddSorted("Berta");
+            freunde.AddSorted("Claudia");
+            freunde.AddSorted("Anton");
+            freunde.AddSorted("Baerbel");
             freunde.Print();
 
             freunde.DeleteByName("Berta");
diff --git a/05-UbgCycleList-Mo/05-UbgCycleList-Mo.csproj b/05-UbgCycleList-Mo/05-UbgCycleList-Mo.csproj
new file mode 100644
index 0000000..47b6c0e
--- /dev/null
+++ b/05-UbgCycleList-Mo/05-UbgCycleList-Mo.csproj
@@ -0,0 +1,9 @@
+<Project Sdk="Microsoft.NET.Sdk">
+
+  <PropertyGroup>
+    <OutputType>Exe</OutputType>
+    <TargetFramework>netcoreapp3.1</TargetFramework>
+    <RootNamespace>_05_UbgCycleList_Mo</RootNamespace>
+  </PropertyGroup>
+
+</Project>
diff --git a/05-UbgCycleList-Mo/CycleList.cs b/05-UbgCycleList-Mo/CycleList.cs
new file mode 100644
index 0000000..8047125
--- /dev/null
+++ b/05-UbgCycleList-Mo/CycleList.cs
@@ -0,0 +1,29 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace _05_UbgCycleList_Mo
+{ 
+    // Schreiben Sie eine doppelt-verkettete Liste, die die Möglichkeit bietet,
+    // das letzte Element wieder mit dem ersten zu verbinden (Zyklus schließen)
+    // Eingebettete Klasse Element
+    // Nutzlast: string name
+    // Methoden:
+    class CycleList
+    {
+        public void AddEnd(string Name) // wie bisher
+        { }
+        public void CloseCycle() // letztes mit dem ersten Element verbinden
+        { }
+        public void Print()
+        { }
+        public void SetIterator(int offset = 0) // Einen internen Zeiger (Iterator) auf das (anfang+offset) Listenelement setzen
+        { }
+        public string GetName() // Den string zurückliefern, der im Iterator-Listenelement gespeichert ist
+        { }
+        public void MoveToNext()
+        { }
+        public void MoveToPrev()
+        { }
+    }
+}
diff --git a/05-UbgCycleList-Mo/Program.cs b/05-UbgCycleList-Mo/Program.cs
new file mode 100644
index 0000000..21f2f21
--- /dev/null
+++ b/05-UbgCycleList-Mo/Program.cs
@@ -0,0 +1,30 @@
+using System;
+
+namespace _05_UbgCycleList_Mo
+{
+    class Program
+    {
+        static void Main(string[] args)
+        {
+            CycleList cl = new CycleList();
+            cl.Print();
+            cl.AddEnd("Anton");
+            cl.AddEnd("Berta");
+            cl.CloseCycle();
+            cl.Print();
+            Console.WriteLine("-------------");
+            cl.AddEnd("Claudia");
+            cl.AddEnd("Dieter");
+            cl.CloseCycle();
+            cl.Print();
+            Console.WriteLine("-------------");
+
+            cl.SetIterator(2);
+            for (int i = 0; i < 10; i++)
+            {
+                Console.WriteLine(cl.GetName());
+                cl.MoveToNext();
+            }
+        }
+    }
+}
diff --git a/Prog2WienkopSS2021.sln b/Prog2WienkopSS2021.sln
index 3a73b0c..089a74f 100644
--- a/Prog2WienkopSS2021.sln
+++ b/Prog2WienkopSS2021.sln
@@ -27,9 +27,11 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "04-UbgListe-Mo", "04-UbgLis
 EndProject
 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "04-1 VerketteteStrukturen2", "04-1 VerketteteStrukturen2\04-1 VerketteteStrukturen2.csproj", "{87021F69-DA51-4CA6-8394-C8819675D893}"
 EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "04-UbgCycleList-Di", "04-UbgCycleList-Di\04-UbgCycleList-Di.csproj", "{E1A44696-1661-47C6-B083-65BD53DA917A}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "04-UbgCycleList-Di", "04-UbgCycleList-Di\04-UbgCycleList-Di.csproj", "{E1A44696-1661-47C6-B083-65BD53DA917A}"
 EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "04-2 DoppeltVerketteteListe", "04-2 DoppeltVerketteteListe\04-2 DoppeltVerketteteListe.csproj", "{A253CA17-DA49-47FB-B8A6-C24D84C9A3E6}"
+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}"
 EndProject
 Global
 	GlobalSection(SolutionConfigurationPlatforms) = preSolution
@@ -93,6 +95,10 @@ Global
 		{A253CA17-DA49-47FB-B8A6-C24D84C9A3E6}.Debug|Any CPU.Build.0 = Debug|Any CPU
 		{A253CA17-DA49-47FB-B8A6-C24D84C9A3E6}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{A253CA17-DA49-47FB-B8A6-C24D84C9A3E6}.Release|Any CPU.Build.0 = Release|Any CPU
+		{69264CD7-160B-45D5-8880-703EEBD6D7C2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{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
 	EndGlobalSection
 	GlobalSection(SolutionProperties) = preSolution
 		HideSolutionNode = FALSE
-- 
GitLab