Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Also ich vermute mal stark das ein UML Diagramm mit dem Implementationsdiagramm gemeint ist
Zu 4. würde ich dir empfehlen nachzudenken wie ein Palindrom aufgebaut ist. Es ist von vorne und von hinten gelesen das selbe. Dies bedeutet, dass bis zu wortlänge/2 sind es die gleichen Buchstaben, aber in umgekehrte Reihenfolge nach der Mitte
Der Stack funktioniert nach dem Prinzip "First in Last Out", somit können wir du das poppen der Elemente vom Stack genau in der gewünschten Reihenfolge für ein Palindrom prüfen.
Hier mal etwas Pseudo Code:
Code:
istPalindrom(str):
Stapel s;
i = 0
while i <= Laenge(str)/2:
s.push(str.charAt(i));
i = i + 1
wenn Laenge(str) % 2 != 0:
i = i + 1
while i < Laenge(str):
temp = s.pop()
wenn temp != str.charAt(i):
geben false zurück
i = i + 1
gebe true zurück
Für die 4c solltest du dir das Beispiel anschauen und schauen was mit dem obigen Pseudocode falsch laufen könnte
Ich weiß auch nicht genau was damit gemeint ist, aber ich vermute stark Klassendiagramm...
So ginge es auch:
Java:
import java.util.ArrayDeque;
import java.util.Deque;
public abstract class AStackQueue<T> implements Cloneable {
protected Deque<T> deque = new ArrayDeque<>();
public void washUp() {
deque.clear();
}
@Override
public String toString() {
return this.getClass() + " [deque=" + deque + "]";
}
}
/*
* LIFO
*/
public class Stack<T> extends AStackQueue<T> {
public void push(T e) {
deque.addLast(e);
}
public T pop() {
return deque.removeLast();
}
public boolean isEmpty() {
return deque.isEmpty();
}
}
public class TellerStack extends Stack<String> {
public void addTellerKlein() {
this.push("klein");
}
public void addTellerGross() {
this.push("groß");
}
@Override
protected Object clone() throws CloneNotSupportedException {
TellerStack ts = new TellerStack();
for (String string : deque) {
ts.push(string);
}
return ts;
}
}
/*
* FIFO
*/
public class Queue<T> extends AStackQueue<T> {
public void enqueue(T e) {
deque.addLast(e);
}
public T dequeue() {
return deque.removeFirst();
}
public boolean isEmpty() {
return deque.isEmpty();
}
}
public class BiberQueue extends Queue<String> {
public void addBiberKlein() {
this.enqueue("klein");
}
public void addBiberGross() {
this.enqueue("groß");
}
@Override
protected Object clone() throws CloneNotSupportedException {
BiberQueue bq = new BiberQueue();
for (String string : deque) {
bq.enqueue(string);
}
return bq;
}
}
import java.util.Objects;
public class Restaurant {
public boolean valid(TellerStack teller, BiberQueue bibers) throws CloneNotSupportedException {
TellerStack zwischenteller = (TellerStack) teller.clone();
BiberQueue zwischenbibers = (BiberQueue) bibers.clone();
System.out.println(zwischenteller + ", " + zwischenbibers);
while (!(zwischenteller.isEmpty() || zwischenbibers.isEmpty())) {
if (!Objects.equals(zwischenteller.pop(), zwischenbibers.dequeue())) {
return false;
}
}
return zwischenteller.isEmpty() && zwischenbibers.isEmpty();
}
public static void main(String[] args) throws CloneNotSupportedException {
TellerStack teller = new TellerStack();
BiberQueue bibers = new BiberQueue();
Restaurant r = new Restaurant();
teller.addTellerKlein();
teller.addTellerKlein();
teller.addTellerGross();
bibers.addBiberGross();
bibers.addBiberKlein();
bibers.addBiberKlein();
System.out.println(r.valid(teller, bibers));
teller.washUp();
bibers.washUp();
teller.addTellerKlein();
teller.addTellerGross();
bibers.addBiberKlein();
bibers.addBiberGross();
System.out.println(r.valid(teller, bibers));
teller.washUp();
bibers.washUp();
teller.addTellerKlein();
teller.addTellerGross();
bibers.addBiberGross();
bibers.addBiberKlein();
System.out.println(r.valid(teller, bibers));
teller.washUp();
bibers.washUp();
}
}
Und damit gleich zu zwei Problemen: https://de.wikipedia.org/wiki/Komposition_an_Stelle_von_Vererbung und https://de.wikipedia.org/wiki/Diamond-Problem
was ich hier aber beides als nicht sehr problematisch finde...