Subtrees hinzugefügt

This commit is contained in:
Dirk Zechnall 2025-01-05 21:22:02 +01:00
parent 155d0786a6
commit 3cc08a2004
443 changed files with 131415 additions and 0 deletions

7
Quellcodes/Alg_DS_Queue/.gitignore vendored Normal file
View file

@ -0,0 +1,7 @@
**/*.sh
**/*.class
**/*.ctxt
repo.adoc
repo_subtree.adoc
/alt
/hide

View file

@ -0,0 +1,53 @@
/**
* Queue basierend auf einem Array
*
* @author Rainer Helfrich
* @version Oktober 2020
*/
public class ArrayQueue<T> extends Queue<T>
{
/**
* Erzeugt eine neue, leere Queue
*/
public ArrayQueue()
{
}
/**
* Fügt ein neues Element hinten in der Schlange ein
* @param x Das neue Element
*/
public void enqueue(T x)
{
}
/**
* Gibt das vorderste Element der Queue zurück (falls sie nicht leer ist)
* @return Das vorderste Element
*/
public T front()
{
return null;
}
/**
* Entfernt das vorderste Element aus der Queue (falls sie nicht leer ist) und gibt es zurück
* @return Das bisherige vorderste Element
*/
public T dequeue()
{
return null;
}
/**
* Gibt zurück, ob die Queue leer ist
* @return true, wenn die Queue leer ist; false sonst
*/
public boolean isEmpty()
{
return false;
}
}

View file

@ -0,0 +1,16 @@
import org.junit.Before;
/**
* Testklasse für die ArrayQueue
*
* @author Rainer Helfrich
* @version Oktober 2020
*/
public class ArrayQueueTester extends QueueTester
{
@Before
public void setUp()
{
theQueue = new ArrayQueue<Integer>();
}
}

View file

@ -0,0 +1,52 @@
/**
* Eine Queue basierend auf einer verketteten Liste
*
* @author Rainer Helfrich
* @version Oktober 2020
*/
public class LinkedQueue<T> extends Queue<T>
{
/**
* Erzeugt eine neue, leere Queue
*/
public LinkedQueue()
{
}
/**
* Gibt das vorderste Element der Queue zurück (falls sie nicht leer ist)
* @return Das vorderste Element
*/
public T front()
{
return null;
}
/**
* Entfernt das vorderste Element aus der Queue (falls sie nicht leer ist) und gibt es zurück
* @return Das bisherige vorderste Element
*/
public T dequeue()
{
return null;
}
/**
* Fügt ein neues Element hinten in der Schlange ein
* @param x Das neue Element
*/
public void enqueue(T x)
{
}
/**
* Gibt zurück, ob die Queue leer ist
* @return true, wenn die Queue leer ist; false sonst
*/
public boolean isEmpty()
{
return false;
}
}

View file

@ -0,0 +1,16 @@
import org.junit.Before;
/**
* Testklasse für die LinkedQueue
*
* @author Rainer Helfrich
* @version Oktober 2020
*/
public class LinkedQueueTester extends QueueTester
{
@Before
public void setUp()
{
theQueue = new LinkedQueue<Integer>();
}
}

View file

@ -0,0 +1,32 @@
/**
* Abstrakte Basisklasse für Queues
*
* @author Rainer Helfrich
* @version Oktober 2020
*/
public abstract class Queue<T>
{
/**
* Gibt zurück, ob die Queue leer ist
* @return true, wenn die Queue leer ist; false sonst
*/
public abstract boolean isEmpty();
/**
* Fügt ein neues Element hinten in der Schlange ein
* @param x Das neue Element
*/
public abstract void enqueue(T x);
/**
* Entfernt das vorderste Element aus der Queue (falls sie nicht leer ist) und gibt es zurück
* @return Das bisherige vorderste Element
*/
public abstract T dequeue();
/**
* Gibt das vorderste Element der Queue zurück (falls sie nicht leer ist)
* @return Das vorderste Element
*/
public abstract T front();
}

File diff suppressed because it is too large Load diff

Binary file not shown.

View file

@ -0,0 +1,76 @@
#BlueJ package file
dependency1.from=ArrayQueueTester
dependency1.to=ArrayQueue
dependency1.type=UsesDependency
dependency2.from=QueueTester
dependency2.to=Queue
dependency2.type=UsesDependency
dependency3.from=LinkedQueueTester
dependency3.to=LinkedQueue
dependency3.type=UsesDependency
editor.fx.0.height=889
editor.fx.0.width=816
editor.fx.0.x=53
editor.fx.0.y=88
objectbench.height=120
objectbench.width=760
package.divider.horizontal=0.6
package.divider.vertical=0.746
package.editor.height=366
package.editor.width=649
package.editor.x=807
package.editor.y=149
package.frame.height=600
package.frame.width=800
package.numDependencies=3
package.numTargets=6
package.showExtends=true
package.showUses=true
project.charset=UTF-8
readme.height=58
readme.name=@README
readme.width=47
readme.x=10
readme.y=10
target1.height=50
target1.name=ArrayQueue
target1.showInterface=false
target1.type=ClassTarget
target1.width=130
target1.x=20
target1.y=170
target2.height=50
target2.name=ArrayQueueTester
target2.showInterface=false
target2.type=UnitTestTargetJunit4
target2.width=140
target2.x=100
target2.y=300
target3.height=50
target3.name=LinkedQueue
target3.showInterface=false
target3.type=ClassTarget
target3.width=130
target3.x=370
target3.y=160
target4.height=50
target4.name=QueueTester
target4.showInterface=false
target4.type=AbstractTarget
target4.width=100
target4.x=220
target4.y=210
target5.height=50
target5.name=LinkedQueueTester
target5.showInterface=false
target5.type=UnitTestTargetJunit4
target5.width=140
target5.x=280
target5.y=300
target6.height=50
target6.name=Queue
target6.showInterface=false
target6.type=AbstractTarget
target6.width=90
target6.x=210
target6.y=40

View file

@ -0,0 +1,124 @@
/**
* Queue basierend auf einem Array
*
* @author Rainer Helfrich
* @version Oktober 2020
*/
public class ArrayQueue<T> extends Queue<T>
{
/**
* Die Nutzdaten
*/
private Object[] daten;
/**
* Der Index des ersten Wertes
*/
private int first;
/**
* Der nächste freie Index
*/
private int last;
/**
* Erzeugt eine neue, leere Queue
*/
public ArrayQueue()
{
daten = new Object[10];
first = 0;
last = 0;
}
/**
* Fügt ein neues Element hinten in der Schlange ein
* @param x Das neue Element
*/
public void enqueue(T x)
{
daten[last] = x;
last++;
if (last == daten.length)
{
last = 0;
}
if (last == first) // Vergrößerung nötig
{
Object[] tmp = new Object[daten.length*2];
System.arraycopy(daten, first, tmp, 0, daten.length - first);
System.arraycopy(daten, 0, tmp, daten.length - first, first);
first = 0;
last = daten.length;
daten = tmp;
}
}
/**
* Gibt das vorderste Element der Queue zurück (falls sie nicht leer ist)
* @return Das vorderste Element
*/
public T front()
{
if (isEmpty())
{
return null;
}
return (T)daten[first];
}
/**
* Entfernt das vorderste Element aus der Queue (falls sie nicht leer ist) und gibt es zurück
* @return Das bisherige vorderste Element
*/
public T dequeue()
{
T x = null;
if (!isEmpty())
{
x = (T)daten[first];
first++;
if (first == daten.length)
{
first = 0;
}
}
return x;
}
/**
* Gibt zurück, ob die Queue leer ist
* @return true, wenn die Queue leer ist; false sonst
*/
public boolean isEmpty()
{
return first == last;
}
/**
* Gibt die Queue in String-Form aus.
* @return Die String-Repräsentation der Queue
*/
@Override
public String toString()
{
StringBuilder b = new StringBuilder();
for (int i = first; i < (last < first ? daten.length : last); i++)
{
if (i != first)
{
b.append(", ");
}
b.append(daten[i]);
}
if (last < first)
{
for (int i = 0; i < last; i++)
{
b.append(", " + daten[i]);
}
}
return "< " + b.toString() + " <";
}
}

View file

@ -0,0 +1,16 @@
import org.junit.Before;
/**
* Testklasse für die ArrayQueue
*
* @author Rainer Helfrich
* @version Oktober 2020
*/
public class ArrayQueueTester extends QueueTester
{
@Before
public void setUp()
{
theQueue = new ArrayQueue<Integer>();
}
}

View file

@ -0,0 +1,137 @@
/**
* Eine Queue basierend auf einer verketteten Liste
*
* @author Rainer Helfrich
* @version Oktober 2020
*/
public class LinkedQueue<T> extends Queue<T>
{
/**
* Der vorderste Wert der Queue
*/
private Listenknoten<T> first;
/**
* Der hinterste Wert der Queue
*/
private Listenknoten<T> last;
/**
* Erzeugt eine neue, leere Queue
*/
public LinkedQueue()
{
first = null;
last = null;
}
/**
* Gibt das vorderste Element der Queue zurück (falls sie nicht leer ist)
* @return Das vorderste Element
*/
public T front()
{
if (first != null)
{
return first.daten;
}
return null;
}
/**
* Entfernt das vorderste Element aus der Queue (falls sie nicht leer ist) und gibt es zurück
* @return Das bisherige vorderste Element
*/
public T dequeue()
{
T w = null;
if (first != null)
{
w = first.daten;
first = first.nachfolger;
if (first == null)
{
last = null;
}
}
return w;
}
/**
* Fügt ein neues Element hinten in der Schlange ein
* @param x Das neue Element
*/
public void enqueue(T x)
{
if (first == null)
{
first = new Listenknoten(x, null);
last = first;
}
else
{
last.nachfolger = new Listenknoten(x, null);
last = last.nachfolger;
}
}
/**
* Gibt zurück, ob die Queue leer ist
* @return true, wenn die Queue leer ist; false sonst
*/
public boolean isEmpty()
{
return first == null && last == null;
}
/**
* Ein Listenknoten, wie er bei den verketteten Listen verwendet wurde.
* Diesmal allerdings als innere Klasse
*/
private class Listenknoten<T>
{
/**
* Der Datenwert des Listenknotens
*/
public T daten;
/**
* Der Nachfolger des Listenknotens
*/
public Listenknoten<T> nachfolger;
/**
* Erzeugt einen neuen Listenknoten
*
* @param daten Der Datenwert des Knotens
* @param nachfolger Der Nachfolger des Knotens
*/
public Listenknoten(T daten, Listenknoten<T> nachfolger)
{
this.daten = daten;
this.nachfolger = nachfolger;
}
}
/**
* Gibt die Queue in String-Form aus.
* @return Die String-Repräsentation der Queue
*/
@Override
public String toString()
{
StringBuilder b = new StringBuilder();
Listenknoten k = first;
while(k != null)
{
if (b.length() > 0)
{
b.append(", ");
}
b.append(k.daten);
k = k.nachfolger;
}
return "< " + b.toString() + " <";
}
}

View file

@ -0,0 +1,16 @@
import org.junit.Before;
/**
* Testklasse für die LinkedQueue
*
* @author Rainer Helfrich
* @version Oktober 2020
*/
public class LinkedQueueTester extends QueueTester
{
@Before
public void setUp()
{
theQueue = new LinkedQueue<Integer>();
}
}

View file

@ -0,0 +1,32 @@
/**
* Abstrakte Basisklasse für Queues
*
* @author Rainer Helfrich
* @version Oktober 2020
*/
public abstract class Queue<T>
{
/**
* Gibt zurück, ob die Queue leer ist
* @return true, wenn die Queue leer ist; false sonst
*/
public abstract boolean isEmpty();
/**
* Fügt ein neues Element hinten in der Schlange ein
* @param x Das neue Element
*/
public abstract void enqueue(T x);
/**
* Entfernt das vorderste Element aus der Queue (falls sie nicht leer ist) und gibt es zurück
* @return Das bisherige vorderste Element
*/
public abstract T dequeue();
/**
* Gibt das vorderste Element der Queue zurück (falls sie nicht leer ist)
* @return Das vorderste Element
*/
public abstract T front();
}

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,5 @@
PROJEKTBEZEICHNUNG: Stack
PROJEKTZWECK: Zwei Implementationen des ADTs Stack
VERSION oder DATUM: Oktober 2020
WIE IST DAS PROJEKT ZU STARTEN: Implementieren Sie den ArrayStack oder den LinkedStack. Führen Sie dann bei den entsprechenden Tester-Klassen "Alles testen" aus.
AUTOR(EN): Rainer Helfrich, ZPG Informatik

View file

@ -0,0 +1,76 @@
#BlueJ package file
dependency1.from=ArrayQueueTester
dependency1.to=ArrayQueue
dependency1.type=UsesDependency
dependency2.from=QueueTester
dependency2.to=Queue
dependency2.type=UsesDependency
dependency3.from=LinkedQueueTester
dependency3.to=LinkedQueue
dependency3.type=UsesDependency
editor.fx.0.height=924
editor.fx.0.width=1139
editor.fx.0.x=59
editor.fx.0.y=36
objectbench.height=126
objectbench.width=759
package.divider.horizontal=0.6
package.divider.vertical=0.734
package.editor.height=360
package.editor.width=635
package.editor.x=807
package.editor.y=149
package.frame.height=600
package.frame.width=799
package.numDependencies=3
package.numTargets=6
package.showExtends=true
package.showUses=true
project.charset=UTF-8
readme.height=58
readme.name=@README
readme.width=47
readme.x=10
readme.y=10
target1.height=50
target1.name=ArrayQueue
target1.showInterface=false
target1.type=ClassTarget
target1.width=130
target1.x=20
target1.y=170
target2.height=50
target2.name=ArrayQueueTester
target2.showInterface=false
target2.type=UnitTestTargetJunit4
target2.width=140
target2.x=100
target2.y=300
target3.height=50
target3.name=LinkedQueue
target3.showInterface=false
target3.type=ClassTarget
target3.width=130
target3.x=370
target3.y=160
target4.height=50
target4.name=QueueTester
target4.showInterface=false
target4.type=AbstractTarget
target4.width=100
target4.x=220
target4.y=210
target5.height=50
target5.name=LinkedQueueTester
target5.showInterface=false
target5.type=UnitTestTargetJunit4
target5.width=140
target5.x=280
target5.y=300
target6.height=50
target6.name=Queue
target6.showInterface=false
target6.type=AbstractTarget
target6.width=90
target6.x=210
target6.y=40

View file

@ -0,0 +1,11 @@
= Material :
|===
|Zuordnung|
|Klassenstufe|
|Bildungsplanbezug |
|Werkzeug|
|Autoren|
|===
== Inhalt