Set
							parent
							
								
									2028acb069
								
							
						
					
					
						commit
						3c64f58439
					
				
							
								
								
									
										18
									
								
								Queue.java
								
								
								
								
							
							
						
						
									
										18
									
								
								Queue.java
								
								
								
								
							|  | @ -5,6 +5,11 @@ public class Queue<T> | ||||||
|      */ |      */ | ||||||
|     public Node<T> first; |     public Node<T> first; | ||||||
|      |      | ||||||
|  |     /** | ||||||
|  |      * letzter Eintrag der Liste | ||||||
|  |      */ | ||||||
|  |     public Node<T> last; | ||||||
|  |      | ||||||
|     /** |     /** | ||||||
|      * Konstruktor |      * Konstruktor | ||||||
|      */ |      */ | ||||||
|  | @ -29,17 +34,10 @@ public class Queue<T> | ||||||
|         if (first == null) { |         if (first == null) { | ||||||
|             // setze neue Node als ersten Eintrag
 |             // setze neue Node als ersten Eintrag
 | ||||||
|             first = n; |             first = n; | ||||||
|  |             last = n; | ||||||
|         } else { |         } else { | ||||||
|             Node<T> current = first; |             last.next = n; | ||||||
|              |             last = n; | ||||||
|             // gehe zum letzten Eintrag
 |  | ||||||
|             while (current.next != null) { |  | ||||||
|                 current = current.next; |  | ||||||
|             } |  | ||||||
|              |  | ||||||
|             // current ist jetzt der letzte Eintrag
 |  | ||||||
|             // setze neue Node als Nachfolger von bisher letzem Eintrag
 |  | ||||||
|             current.setNext(n); |  | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|          |          | ||||||
|  |  | ||||||
|  | @ -0,0 +1,168 @@ | ||||||
|  | public class Set<T> | ||||||
|  | { | ||||||
|  |     /** | ||||||
|  |      * erster Eintrag der Liste | ||||||
|  |      */ | ||||||
|  |     public Node<T> first; | ||||||
|  |      | ||||||
|  |     /** | ||||||
|  |      * Konstruktor | ||||||
|  |      */ | ||||||
|  |     public Set() {} | ||||||
|  |      | ||||||
|  |     /** | ||||||
|  |      * Überprüft, ob die Liste leer ist | ||||||
|  |      *  | ||||||
|  |      * @return true, wenn keine Elemente in der Liste | ||||||
|  |      */ | ||||||
|  |     public boolean isEmpty() { | ||||||
|  |         return first == null; | ||||||
|  |     } | ||||||
|  |      | ||||||
|  |     /** | ||||||
|  |      * Berechnet die Größe der Liste | ||||||
|  |      *  | ||||||
|  |      * @return Anzahl der Elemente in der Liste | ||||||
|  |      */ | ||||||
|  |     public int size() { | ||||||
|  |         Node<T> current = first; | ||||||
|  |         int laenge = 0; | ||||||
|  |          | ||||||
|  |         while (current != null) { | ||||||
|  |             current = current.next; | ||||||
|  |             laenge++; | ||||||
|  |         } | ||||||
|  |          | ||||||
|  |         return laenge; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     /** | ||||||
|  |      * Überprüft, ob die Liste einen konkreten Wert enthält | ||||||
|  |      */ | ||||||
|  |     public boolean contains(T wert) { | ||||||
|  |         Node<T> current = first; | ||||||
|  |          | ||||||
|  |         while (current != null) { | ||||||
|  |             if (current.wert == wert) return true; | ||||||
|  |              | ||||||
|  |             current = current.next; | ||||||
|  |         } | ||||||
|  |          | ||||||
|  |         return false; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     /** | ||||||
|  |      * Fügt ein neues Element am Anfang der Liste ein | ||||||
|  |      */ | ||||||
|  |     public void add(T neu) { | ||||||
|  |         if (contains(neu)) return; | ||||||
|  |          | ||||||
|  |         Node n = new Node<T>(neu); // Neue Node mit Zahl "neu" anlegen
 | ||||||
|  |          | ||||||
|  |         n.next = first; | ||||||
|  |         first = n; | ||||||
|  |     } | ||||||
|  |          | ||||||
|  |     /** | ||||||
|  |      * Löscht das Element mit dem angegebenen Wert | ||||||
|  |      */ | ||||||
|  |     public void remove(T wert) { | ||||||
|  |         if (!contains(wert)) return; | ||||||
|  |          | ||||||
|  |         if (first.wert == wert) { | ||||||
|  |             first = first.next; | ||||||
|  |         } else { | ||||||
|  |             Node<T> current = first; | ||||||
|  | 
 | ||||||
|  |             if (current.next.wert == wert) { | ||||||
|  |                 current.next = current.next.next; | ||||||
|  |                 return; | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  |      | ||||||
|  |     /** | ||||||
|  |      * Bildet die Schnittmenge | ||||||
|  |      */ | ||||||
|  |     public Set<T> intersection(Set<T> s) { | ||||||
|  |         Set<T> neu = new Set<T>(); | ||||||
|  |          | ||||||
|  |         Node<T> current = first; | ||||||
|  |          | ||||||
|  |         // gehe alle Elemente in this durch
 | ||||||
|  |         while (current != null) { | ||||||
|  |             // wenn auch s das Element enthält...
 | ||||||
|  |             if (s.contains(current.wert)) { | ||||||
|  |                 // ... füge es der Schnittmenge hinzu
 | ||||||
|  |                 neu.add(current.wert); | ||||||
|  |             } | ||||||
|  |             current = current.next; | ||||||
|  |         } | ||||||
|  |          | ||||||
|  |         return neu; | ||||||
|  |     } | ||||||
|  |      | ||||||
|  |     /** | ||||||
|  |      * Bildet die Vereinigungsmenge | ||||||
|  |      */ | ||||||
|  |     public Set<T> union(Set<T> s) { | ||||||
|  |         Set<T> neu = new Set<T>(); | ||||||
|  |          | ||||||
|  |         // gehe aktuelles Set durch und füge alle Werte zum
 | ||||||
|  |         // neuen hinzu
 | ||||||
|  |         Node<T> current = first; | ||||||
|  |         while (current != null) { | ||||||
|  |             neu.add(current.wert); | ||||||
|  |             current = current.next; | ||||||
|  |         } | ||||||
|  |          | ||||||
|  |         // gehe s durch und füge alle Werte hinzu
 | ||||||
|  |         // doppelte Einträge werden bei add automatisch
 | ||||||
|  |         // gefiltert und nicht doppelt eingetragen
 | ||||||
|  |         Node<T> current2 = s.first; | ||||||
|  |         while (current2 != null) { | ||||||
|  |             neu.add(current2.wert); | ||||||
|  |             current = current2.next; | ||||||
|  |         } | ||||||
|  |          | ||||||
|  |         return neu; | ||||||
|  |     } | ||||||
|  |      | ||||||
|  |     /** | ||||||
|  |      * Bildet die Differenz | ||||||
|  |      */ | ||||||
|  |     public Set<T> difference(Set<T> s) { | ||||||
|  |         Set<T> neu = new Set<T>(); | ||||||
|  |          | ||||||
|  |         // gehe aktuelles Set durch
 | ||||||
|  |         Node<T> current = first; | ||||||
|  |         while (current != null) { | ||||||
|  |             // falls der Wert nicht in s enthalten ist...
 | ||||||
|  |             if (!s.contains(current.wert)) { | ||||||
|  |                 // ... füge den zur Differenz hinzu
 | ||||||
|  |                 neu.add(current.wert); | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |          | ||||||
|  |         return neu; | ||||||
|  |     } | ||||||
|  |      | ||||||
|  |     /** | ||||||
|  |      * Überprüft, ob s eine Teilmenge ist | ||||||
|  |      */ | ||||||
|  |     public boolean subset(Set<T> s) { | ||||||
|  |         Node<T> current = s.first; | ||||||
|  |         // gehe alle Elemente in s durch
 | ||||||
|  |         while(current != null) { | ||||||
|  |             // falls ein Wert nicht in this ist...
 | ||||||
|  |             if (!contains(current.wert)) { | ||||||
|  |                 // ... ist s keine Teilmenge und kann abgebrochen werden
 | ||||||
|  |                 return false; | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |         // läuft die Schleife bis zum Ende, dann sind alle
 | ||||||
|  |         // Elemente aus s auch in this enthalten, dann ist
 | ||||||
|  |         // s also eine Teilmenge von this
 | ||||||
|  |         return true; | ||||||
|  |     } | ||||||
|  | } | ||||||
		Loading…
	
		Reference in New Issue