Lösung 3.12.11, 3., Vollständige Induktion: Alle Ergebnisse sieht man einfach durch Einsetzen der jeweiligen Nachbedingung. 3. a) Die Zeiger auf die jeweils erzeugten Knoten werden mit n1, n2, …, nk bezeichnet. Induktionsanfang: Damit man die Struktur sieht, werden die Ergebnisse der ersten zwei Aufrufe dargestellt. // first last n1 0 0 // 1. Aufruf pushFront(d1) n1 n1 // 2. Aufruf pushFront(d2) n2 n2 ->{d1,0} ->{d1,0} ->{d2,n1} Induktionsvoraussetzung: Bei den ersten k Aufrufen wurden k Knoten erzeugt, auf die n 1, n2, …, nk zeigen: // first last n1 // k Aufrufe pushFront(dk) nk n1 ->{d1,0} n2 ... nk ->{d2,n1} ->{dk,nk-1} nk+1 Induktionsschritt: Der (k+1)-te Aufruf von pushFront(d k+1): Einsetzen der Nachbedingung von pushFront // k+1 Aufr. pushFront(dk+1) nk+1 ->{d1,0} ->{d2,n1} ->{dk,nk-1} ->{dk+1,nk} 3. b) ------------------------------------------------------------------------------Die Zeiger auf die jeweils erzeugten Knoten werden mit n1, n2, …, nk bezeichnet. Induktionsanfang: Damit man die Struktur sieht, werden die Ergebnisse der ersten zwei Aufrufe dargestellt. // first last n1 0 0 // 1. Aufruf pushBack(d1) n1 n1 ->{d1,0} // 2. Aufruf pushBack(d2) n2 ->{d1,n2} n2 ->{d2,0} Induktionsvoraussetzung: Bei den ersten k Aufrufen wurden k Knoten erzeugt, auf die n 1, n2, …, nk zeigen: // first last n1 // k Aufrufe pushBack(dk) n1 nk ->{d1,n2} n2 ... nk ->{d2,n3} ->{dk,0} nk+1 Induktionsschritt: Der (k+1)-te Aufruf von pushFront(d k+1): Einsetzen der Nachbedingung von pushBack // k+1 Aufr. pushBack(dk+1) n1 nk+1 ->{d1,n2} ->{d2,n3} ->{dk,nk+1} ->{dk+1,0} 3. c) ------------------------------------------------------------------------------Die Zeiger auf die jeweils erzeugten Knoten werden mit n1, n2, …, nk bezeichnet. Aus Platzgründen werden pushFrontDll mit pushFDll, firstDll mit first und lastDll mit last abgekürzt: Induktionsanfang: Damit man die Struktur sieht, werden die Ergebnisse der ersten zwei Aufrufe dargestellt. // first last n1 0 0 // 1. Aufruf pushFDll(d1) n1 // 2. Aufruf pushFDll(d2) n2 n1 n2 ->{d1,0,0} ->{ d1,0,n2} ->{d2,n1,0} Induktionsvoraussetzung: Bei den ersten k Aufrufen wurden k Knoten erzeugt, auf die n 1, n2, …, nk zeigen: // first last // k Aufrufe pushFDll(dk) nk n1 n1 ... nk ->{d1,0,n2} ->{dk,nk-1,0} nk+1 Induktionsschritt: Der (k+1)-te Aufruf von pushFrontDll(dk+1): Einsetzen der Nachbedingung von pushFrontDll: // k. Aufruf pushFDll(dk+1) nk+1 n1 ->{d1,0,n2} ->{dk,nk-1,nk+1} ->{dk+1,nk,0} 3. d) ------------------------------------------------------------------------------Die Zeiger auf die jeweils erzeugten Knoten werden mit n1, n2, …, nk bezeichnet. Aus Platzgründen werden pushBackDll mit pushBDll, firstDll mit first und lastDll mit last abgekürzt: Induktionsanfang: Damit man die Struktur sieht, werden die Ergebnisse der ersten zwei Aufrufe dargestellt. // first last n1 0 0 // 1. Aufruf pushBDll(d1) n1 // 2. Aufruf pushBDll(d2) n1 ->{d1,0,0} n2 ->{d1,n2,0} n2 ->{d2,0,n1} Induktionsvoraussetzung: Bei den ersten k Aufrufen wurden k Knoten erzeugt, auf die n 1, n2, …, nk zeigen: // first last n1 ... nk // k Aufrufe pushBDll(dk) n1 nk ->{d1,n2,0} ->{dk,0,nk-1} nk+1 Induktionsschritt: Der (k+1)-te Aufruf von pushBackDll(dk+1): Einsetzen der Nachbedingung von pushBackDll: // k. Aufruf pushBDll(dk+1) n1 nk+1 ->{d1,n2,0} ->{dk,nk+1,nk-1}->{dk+1,0,nk}