# Algorithmen und Datenstrukturen, Blatt 6 ## Aufgabe 1 ### Aufgabe 1a) 7,6,5,4,3,2,1 $\rightarrow$ 7,3,4,5,6,1,2 Im Stack ist diese Rangiermöglichkeit durchführbar Hier für geht man folgendermaßen vor: 1 $\rightarrow$ Stack 2 $\rightarrow$ nach rechts 1 $\rightarrow$ nach rechts 3 $\rightarrow$ Stack 4 $\rightarrow$ Stack 5 $\rightarrow$ Stack 6 $\rightarrow$ nach rechts 5 $\rightarrow$ nach rechts 4 $\rightarrow$ nach rechts 3 $\rightarrow$ nach rechts 7 $\rightarrow$ nach rechts Bei der Queue ist dies nicht möglich: man würde zunächst folgendermaßen vorgehen 1 $\rightarrow$ Spur 2 $\rightarrow$ Überholspur, nach rechts 1 $\rightarrow$ nach rechts 5,4,3 $\rightarrow$ Spur 6$\rightarrow$ Überholspur nach rechts Als nächstes müsste die Reihenfolge der Waggons 5,4,3 verändert werden. Diese befinden sich allerding in der Spur der Queue und somit ist es nicht möglich, die Reihenfolge wie vorgegeben aufzustellen. ### Aufgabe 1b) 7,6,5,4,3,2,1 $\rightarrow$ 6,3,7,2,1,5,4 Mit dem Stack ist diese Reihenfolge nicht möglich. Man würde zunächst wie folgt vorgehen: 3,2,1 $\rightarrow$ Stack 5,4 $\rightarrow$ nach rechts Als nächstes müsste Waggon 1 nach rechts. Dieser befindet sich jedoch ganz unten im Stack und ist deshalb nicht vor den Waggons 2 und 3 sichtbar. Mit der Queue ist diese Reihenfolge wie folgt zu erreichen: 3,2,1 $\rightarrow$ Spur 5,4 $\rightarrow$ Überholspur, nach rechts 2,1 $\rightarrow$ nach rechts 6 $\rightarrow$ Spur 7 $\rightarrow$ Überholspur, nach rechts 6,3 $\rightarrow$ nach rechts ## Aufgabe 2 ### Aufgabe 2a) ```java= class StakaQueue stack <x> stack1 (s1) stack <x> stack2 (s2) enqueue (x y) while( s1 not empty) s2.push(s1.pop) s1.push(y) while(s2 not empty) s1.push(s1.pop) x dequeue() if(s2.isEmpty) while(s2 not empty) s2.push(s1.pop()) return s2.pop() ``` ### Aufgabe 2b) ```java= class QueueAStack Queue <x> q1 Queue <x> q2 int size stack() size=0 push( x item) size++ q2.add (item) while(q2 ist not empty) q2.add(q1.peek()) q1.remove() Queue<x>q >q1 q1=q2 q2=q pop() if(q1 is empty) return q1.remove size-- x top() if(q1 is empty) return null return q1.peek() int size() return size ``` ### Aufgabe 2c) ```java= class Katze Stack <int> s1 Stack <int> s2 // maxStack newPush(int x) s1.push if(x >= s2) s2.push newPop() if (s1.peek==s2.peek) s2.pop() else s1.pop int findMax() if(s2 is empty) return null else return s2.peek() ``` ###### tags: `Algorithmen und Datenstrukturen` `Informatik` `Uni`