From 0507c76d08c18ad93c3dadf362f0a1834ff96c92 Mon Sep 17 00:00:00 2001 From: wienkop <uwe.wienkop@th-nuernberg.de> Date: Tue, 30 Mar 2021 11:19:43 +0200 Subject: [PATCH] 2021-03-30 Liste mit Indexer, GetEnumerator, AddBeforeNth, DeleteFirst --- 02-4 VerketteteStrukturenIntro/Liste.cs | 76 ++++++++++++++++++++--- 02-4 VerketteteStrukturenIntro/Program.cs | 26 ++++++-- 03-UbgListe-Di/03-UbgListe-Di.csproj | 9 +++ 03-UbgListe-Di/Program.cs | 31 +++++++++ 03-UbgListe-Di/ToDoListe.cs | 59 ++++++++++++++++++ Prog2WienkopSS2021.sln | 8 ++- 6 files changed, 196 insertions(+), 13 deletions(-) create mode 100644 03-UbgListe-Di/03-UbgListe-Di.csproj create mode 100644 03-UbgListe-Di/Program.cs create mode 100644 03-UbgListe-Di/ToDoListe.cs diff --git a/02-4 VerketteteStrukturenIntro/Liste.cs b/02-4 VerketteteStrukturenIntro/Liste.cs index bf2f38a..0b68013 100644 --- a/02-4 VerketteteStrukturenIntro/Liste.cs +++ b/02-4 VerketteteStrukturenIntro/Liste.cs @@ -4,16 +4,23 @@ using System.Text; namespace _02_4_VerketteteStrukturenIntro { - class LItem - { - public int zahl; - public LItem next; - - public LItem(int k) { zahl = k; next = null; } - } + class Liste { - public LItem first, last; + // LItem ist eine private Klasse der Klasse Liste + // private ~ Liste darf auf LItem zugreifen + // Methoden außerhalb von Liste dürfen dies nicht! + private class LItem + { + public int zahl; + public LItem next; + + public LItem(int k) { zahl = k; next = null; } + } + + private LItem first, last; + private int anz; + public Liste() { first = last = null; @@ -21,6 +28,7 @@ namespace _02_4_VerketteteStrukturenIntro public void AddLast(int k) { LItem neu = new LItem(k); + anz++; if (first == null) first = last = neu; @@ -33,6 +41,7 @@ namespace _02_4_VerketteteStrukturenIntro public void AddFirst(int k) { LItem neu = new LItem(k); + anz++; if (first == null) first = last = neu; @@ -54,5 +63,56 @@ namespace _02_4_VerketteteStrukturenIntro // item = item.next; //} } + public int this[int ind] + { + get + { + LItem item = first; + for (int i = 0; i < ind; i++) + item = item.next; + return item.zahl; + } + } + public IEnumerator<int> GetEnumerator() + { + for (LItem item = first; item != null; item = item.next) + yield return item.zahl; + } + + + public void AddBeforeNth(int index, int zahl) + { + if (index < 0 || index > anz) + throw new ArgumentOutOfRangeException("Index außerhalb der Listengröße"); + if (index == 0) + AddFirst(zahl); + else if (index == anz) + AddLast(zahl); + else // Wir wissen: Nicht vor das erste und nicht hinter das letzte Element + // Es gibt mindestens ein Element VORHER und ein Element NACHHER + { + LItem neu = new LItem(zahl); + anz++; + LItem item = first; + for (int i = 1; i < index; i++) // Element mit index-1 suchen + item = item.next; + + // REIHENFOLGE ist ENTSCHEIDEND + neu.next = item.next; // #1 Nachfolgeradresse im neuen Elem. speichern + item.next = neu; // #2 Nachfolger von Elem[index-1] auf das neue Element setzen + } + } + + public void DeleteFirst() + { + if (anz == 0) + return; + + anz--; + if (anz == 0) + first = last = null; + else // Wir wissen: Die Liste enthält MEHR als ein Element! + first = first.next; + } } } diff --git a/02-4 VerketteteStrukturenIntro/Program.cs b/02-4 VerketteteStrukturenIntro/Program.cs index ad42e13..1b25948 100644 --- a/02-4 VerketteteStrukturenIntro/Program.cs +++ b/02-4 VerketteteStrukturenIntro/Program.cs @@ -31,12 +31,30 @@ namespace _02_4_VerketteteStrukturenIntro l1.AddLast(20); l1.AddLast(30); - for (int i = 100; i < 110; i++) - l1.AddLast(i); + //for (int i = 100; i < 110; i++) + // l1.AddLast(i); - l1.AddFirst(5); + //l1.AddFirst(5); - l1.Ausgabe(); + //l1.Ausgabe(); + + + // Bitte so nicht programmieren!!! + // Durch den Indexer sehr ineffizient! + //for (int i = 0; i < 1000000; i++) + //{ + // Console.WriteLine($"{i}. Element: {l1[i]}"); + //} + + l1.AddBeforeNth(2, 25); + + int sum = 0; + foreach (int item in l1) + { + Console.WriteLine($"Liste: {item}"); + sum += item; + } + Console.WriteLine($"Die Summe beträgt: {sum}"); } } } diff --git a/03-UbgListe-Di/03-UbgListe-Di.csproj b/03-UbgListe-Di/03-UbgListe-Di.csproj new file mode 100644 index 0000000..bf48e79 --- /dev/null +++ b/03-UbgListe-Di/03-UbgListe-Di.csproj @@ -0,0 +1,9 @@ +<Project Sdk="Microsoft.NET.Sdk"> + + <PropertyGroup> + <OutputType>Exe</OutputType> + <TargetFramework>netcoreapp3.1</TargetFramework> + <RootNamespace>_03_UbgListe_Di</RootNamespace> + </PropertyGroup> + +</Project> diff --git a/03-UbgListe-Di/Program.cs b/03-UbgListe-Di/Program.cs new file mode 100644 index 0000000..833456e --- /dev/null +++ b/03-UbgListe-Di/Program.cs @@ -0,0 +1,31 @@ +using System; + +namespace _03_UbgListe_Di +{ + class Program + { + // Listenstruktur anlegen (string) + // anf, ende - Zeiger + // anz - mitzählen + // Add-Befehl + // GetAll() -- Alle gespeicherten string-Einträge als Feld zurückliefern + static void Main(string[] args) + { + ToDoListe toDoListe = new ToDoListe(); + toDoListe.Add("Bericht fertigstellen"); + toDoListe.Add("Webseite aktualisieren"); + + //string[] aufgaben = toDoListe.GetAll(); + //foreach (var item in aufgaben) + //{ + // Console.WriteLine(item); + //} + + foreach (var item in toDoListe) + { + Console.WriteLine(item); + } + Console.WriteLine(toDoListe[1]); + } + } +} diff --git a/03-UbgListe-Di/ToDoListe.cs b/03-UbgListe-Di/ToDoListe.cs new file mode 100644 index 0000000..cd7bd71 --- /dev/null +++ b/03-UbgListe-Di/ToDoListe.cs @@ -0,0 +1,59 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace _03_UbgListe_Di +{ + class LItem + { + public string toDo; + public LItem next; + public LItem (string ToDo) { toDo = ToDo;next = null; } + } + class ToDoListe + { + LItem anf = null, ende = null; + int anz = 0; + + public void Add(string todo) + { + LItem neu = new LItem(todo); + anz++; + + if (anf == null) + anf = ende = neu; + else + { + ende.next = neu; + ende = neu; + } + } + public string [] GetAll() + { + if (anz == 0) + return null; + + string[] res = new string[anz]; + int i = 0; + for (LItem item = anf; item != null; item=item.next) + res[i++] = item.toDo; + return res; + } + public IEnumerator<string> GetEnumerator() + { + for (LItem item = anf; item != null; item = item.next) + yield return item.toDo; + } + public string this[int ind] + { + get + { + LItem item = anf; + for (int i = 0; i < ind; i++) + item = item.next; + return item.toDo; + } + } + + } +} diff --git a/Prog2WienkopSS2021.sln b/Prog2WienkopSS2021.sln index cf5db06..0d2b9d0 100644 --- a/Prog2WienkopSS2021.sln +++ b/Prog2WienkopSS2021.sln @@ -19,7 +19,9 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "02-UbgKlasseTime-Di", "02-U EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "02-4 VerketteteStrukturenIntro", "02-4 VerketteteStrukturenIntro\02-4 VerketteteStrukturenIntro.csproj", "{1FC21BA1-47A7-4466-BA80-A29C0AFD5FB6}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "03-UbgKlasseTime-Mo", "03-UbgKlasseTime-Mo\03-UbgKlasseTime-Mo.csproj", "{DD51B164-0F20-47B9-94C4-549CE555DDC2}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "03-UbgKlasseTime-Mo", "03-UbgKlasseTime-Mo\03-UbgKlasseTime-Mo.csproj", "{DD51B164-0F20-47B9-94C4-549CE555DDC2}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "03-UbgListe-Di", "03-UbgListe-Di\03-UbgListe-Di.csproj", "{0E5C379D-0D10-4CAC-A12C-4757DE1E5C4E}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -63,6 +65,10 @@ Global {DD51B164-0F20-47B9-94C4-549CE555DDC2}.Debug|Any CPU.Build.0 = Debug|Any CPU {DD51B164-0F20-47B9-94C4-549CE555DDC2}.Release|Any CPU.ActiveCfg = Release|Any CPU {DD51B164-0F20-47B9-94C4-549CE555DDC2}.Release|Any CPU.Build.0 = Release|Any CPU + {0E5C379D-0D10-4CAC-A12C-4757DE1E5C4E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {0E5C379D-0D10-4CAC-A12C-4757DE1E5C4E}.Debug|Any CPU.Build.0 = Debug|Any CPU + {0E5C379D-0D10-4CAC-A12C-4757DE1E5C4E}.Release|Any CPU.ActiveCfg = Release|Any CPU + {0E5C379D-0D10-4CAC-A12C-4757DE1E5C4E}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE -- GitLab