\documentclass{bschlangaul-aufgabe} \bLadePakete{java} \begin{document} \bAufgabenMetadaten{ Titel = {Aufgabe 4}, Thematik = {Sortieren mit Stapel}, Referenz = 66115-2015-F.T2-A5, RelativerPfad = Examen/66115/2015/03/Thema-2/Aufgabe-5.tex, ZitatSchluessel = examen:66115:2015:03, BearbeitungsStand = mit Lösung, Korrektheit = unbekannt, Ueberprueft = {unbekannt}, Stichwoerter = {Stapel (Stack), Algorithmische Komplexität (O-Notation)}, EinzelpruefungsNr = 66115, Jahr = 2015, Monat = 03, ThemaNr = 2, AufgabeNr = 5, } Gegeben\index{Stapel (Stack)} \footcite{examen:66115:2015:03} seien die Standardstrukturen Stapel (Stack) und Schlange (Queue) mit folgenden Standardoperationen: \footcite[Aufgabe 4]{aud:ab:4} \begin{center} \begin{tabular}{l|l} Stapel & Schlange \\\hline \bJavaCode{boolean isEmpty()} & \bJavaCode{boolean isEmpty()} \\ \bJavaCode{void push(int e)} & \bJavaCode{enqueue(int e)} \\ \bJavaCode{int pop()} & \bJavaCode{int dequeue()} \\ \bJavaCode{int top()} & \bJavaCode{int head()} \\ \end{tabular} \end{center} \noindent Beim Stapel gibt die Operation \bJavaCode{top()} das gleiche Element wie \bJavaCode{pop()} zurück, bei der Schlange gibt \bJavaCode{head()} das gleiche Element wie \bJavaCode{dequeue()} zurück. Im Unterschied zu \bJavaCode{pop()}, beziehungsweise \bJavaCode{dequeue()}, wird das Element bei \bJavaCode{top()} und \bJavaCode{head()} nicht aus der Datenstruktur entfernt. \begin{enumerate} %% % %% \item Geben Sie in Pseudocode einen Algorithmus \bJavaCode{sort(Stapel s)} an, der als Eingabe einen Stapel \bJavaCode{s} mit \bJavaCode{n} Zahlen erhält und die Zahlen in \bJavaCode{s} sortiert. (Sie dürfen die Zahlen wahlweise entweder aufsteigend oder absteigend sortieren.) Verwenden Sie als Hilfsdatenstruktur ausschließlich eine Schlange \bJavaCode{q}. Sie erhalten volle Punktzahl, wenn Sie außer \bJavaCode{s} und \bJavaCode{q} keine weiteren Variablen benutzen. Sie dürfen annehmen, dass alle Zahlen in \bJavaCode{s} verschieden sind. \begin{bAntwort} \begin{minted}{md} q := neue Schlange while s not empty: q.enqueue(S.pop()) while q not empty: while s not empty and s.top() < q.head(): q.enqueue(s.pop()) s.push(q.dequeue) \end{minted} \bPseudoUeberschrift{Als Java-Code} \bJavaExamen[firstline=5,lastline=25]{66115}{2015}{03}{schlange/Sort} \bPseudoUeberschrift{Klasse Sort} \bJavaExamen{66115}{2015}{03}{schlange/Sort} \bPseudoUeberschrift{Klasse Schlange} \bJavaExamen{66115}{2015}{03}{schlange/Schlange} \bPseudoUeberschrift{Klasse Element} \bJavaExamen{66115}{2015}{03}{schlange/Element} \bPseudoUeberschrift{Test-Klasse} \bJavaTestDatei{examen/examen_66115/jahr_2015/fruehjahr/schlange/TestCase} \end{bAntwort} %% % %% \item Analysieren Sie die Laufzeit\index{Algorithmische Komplexität (O-Notation)} Ihrer Methode in Abhängigkeit von $n$. \begin{bAntwort} Zeitkomplexität: $\mathcal{O}(n^2)$, da es zwei ineinander verschachtelte \bJavaCode{while}-Schleifen gibt, die von der Anzahl der Elemente im Stapel abhängen. \end{bAntwort} \end{enumerate} \end{document}